{"record":{"id":"8525dd3409559c01","repo":"theonedev/onedev","slug":"no-link-spec-found","errorCode":null,"errorMessage":"No link spec found: ","messagePattern":"No link spec found: ","errorType":"exception","errorClass":"ExplicitException","httpStatus":null,"severity":"error","filePath":"server-plugin/server-plugin-import-youtrack/src/main/java/io/onedev/server/plugin/imports/youtrack/ImportServer.java","lineNumber":344,"sourceCode":"\t\t\t\t\toneDevFieldValue = null;\n\t\t\t\t}\n\t\t\t\tFieldSpec fieldSpec = getIssueSetting().getFieldSpec(oneDevFieldName);\n\t\t\t\tif (fieldSpec == null)\n\t\t\t\t\tthrow new ExplicitException(\"No field spec found: \" + oneDevFieldName);\n\t\t\t\tfieldMappings.put(mapping.getYouTrackIssueField(), new Pair<>(fieldSpec, oneDevFieldValue));\n\t\t\t}\n\t\t\tfor (IssueTagMapping mapping : option.getIssueTagMappings()) {\n\t\t\t\tString oneDevFieldName = StringUtils.substringBefore(mapping.getOneDevIssueField(), \"::\");\n\t\t\t\tString oneDevFieldValue = StringUtils.substringAfter(mapping.getOneDevIssueField(), \"::\");\n\t\t\t\tFieldSpec fieldSpec = getIssueSetting().getFieldSpec(oneDevFieldName);\n\t\t\t\tif (fieldSpec == null)\n\t\t\t\t\tthrow new ExplicitException(\"No field spec found: \" + oneDevFieldName);\n\t\t\t\ttagMappings.put(mapping.getYouTrackIssueTag(), new Pair<>(fieldSpec, oneDevFieldValue));\n\t\t\t}\n\t\t\tfor (IssueLinkMapping mapping : option.getIssueLinkMappings()) {\n\t\t\t\tLinkSpec linkSpec = OneDev.getInstance(LinkSpecService.class).find(mapping.getOneDevIssueLink());\n\t\t\t\tif (linkSpec == null)\n\t\t\t\t\tthrow new ExplicitException(\"No link spec found: \" + mapping.getOneDevIssueLink());\n\t\t\t\tlinkMappings.put(mapping.getYouTrackIssueLink(), linkSpec);\n\t\t\t}\n\n\t\t\tSet<String> nonExistentLogins = new LinkedHashSet<>();\n\t\t\tSet<String> unmappedIssueTags = new LinkedHashSet<>();\n\t\t\tSet<String> unmappedIssueFields = new LinkedHashSet<>();\n\t\t\tSet<String> unmappedIssueLinks = new LinkedHashSet<>();\n\t\t\tSet<String> unmappedIssueStates = new LinkedHashSet<>();\n\t\t\tMap<String, String> mismatchedIssueFields = new LinkedHashMap<>();\n\t\t\tSet<String> tooLargeAttachments = new LinkedHashSet<>();\n\n\t\t\tAtomicInteger numOfImportedIssues = new AtomicInteger(0);\n\n\t\t\tList<Issue> issues = new ArrayList<>();\n\t\t\tMap<String, Pair<LinkSpec, List<String>>> linkedIssuesMapping = new HashMap<>();\n\n\t\t\tString fields = \"\"\n\t\t\t\t\t+ \"idReadable,\"","sourceCodeStart":326,"sourceCodeEnd":362,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-plugin/server-plugin-import-youtrack/src/main/java/io/onedev/server/plugin/imports/youtrack/ImportServer.java#L326-L362","documentation":"Thrown during YouTrack issue import when an IssueLinkMapping references a OneDev link spec (issue link type, e.g. 'depends on') that does not exist — OneDev.getInstance(LinkSpecService.class).find() returned null. The importer requires every YouTrack link type to be mapped to a defined OneDev link spec.","triggerScenarios":"issueLinkMappings contains oneDevIssueLink values like \"Depends on\" or \"Relates to\" that were deleted/renamed in OneDev's link spec administration, or the settings were copied from an instance with different link specs.","commonSituations":"Admin removed or renamed link types in OneDev global settings; migrating import settings between OneDev instances; typo in link name (link spec names are exact).","solutions":["Recreate the missing link spec in OneDev administration (Issue Links).","Re-generate the import option to refresh link mappings against current link specs.","Edit the mapping to use an existing link spec name exactly.","Remove link mappings for types you do not need."],"exampleFix":"// before\nissueLinkMappings: [{youTrackIssueLink: \"depends\", oneDevIssueLink: \"Depends on\"}]  // link spec deleted\n\n// after\nissueLinkMappings: [{youTrackIssueLink: \"depends\", oneDevIssueLink: \"dependent on\"}]","handlingStrategy":"validation","validationCode":"for (IssueLinkMapping m : option.getIssueLinkMappings()) {\n    if (OneDev.getInstance(LinkSpecService.class).find(m.getOneDevIssueLink()) == null)\n        throw new IllegalStateException(\"Missing link spec: \" + m.getOneDevIssueLink());\n}","typeGuard":null,"tryCatchPattern":"try { importServer.importIssues(...); } catch (ExplicitException e) { logger.error(\"Link mapping invalid: {}\", e.getMessage()); }","preventionTips":["Confirm required link specs exist in OneDev admin before importing.","Match link spec names exactly (they are user-defined strings).","Regenerate import options after link spec renames."],"tags":["youtrack","import","link-mapping","configuration"],"backgroundTag":"resource-not-found","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}