{"record":{"id":"a449ca109cb6f233","repo":"jenkinsci/jenkins","slug":"failed-to-load-the-file-does-not-exist","errorCode":null,"errorMessage":"Failed to load {}. The file does not exist","messagePattern":"Failed to load (.+?)\\. The file does not exist","errorType":"exception","errorClass":"FileNotFoundException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/hudson/ClassicPluginStrategy.java","lineNumber":98,"sourceCode":"public class ClassicPluginStrategy implements PluginStrategy {\n\n    private static final Logger LOGGER = Logger.getLogger(ClassicPluginStrategy.class.getName());\n\n    /**\n     * Filter for jar files.\n     */\n    private static final FilenameFilter JAR_FILTER = (dir, name) -> name.endsWith(\".jar\");\n\n    private final PluginManager pluginManager;\n\n    public ClassicPluginStrategy(PluginManager pluginManager) {\n        this.pluginManager = pluginManager;\n    }\n\n    @Override public String getShortName(File archive) throws IOException {\n        Manifest manifest;\n        if (!archive.exists()) {\n            throw new FileNotFoundException(\"Failed to load \" + archive + \". The file does not exist\");\n        } else if (!archive.isFile()) {\n            throw new FileNotFoundException(\"Failed to load \" + archive + \". It is not a file\");\n        }\n\n        if (isLinked(archive)) {\n            manifest = loadLinkedManifest(archive);\n        } else {\n            try (JarFile jf = new JarFile(archive, false)) {\n                manifest = jf.getManifest();\n            } catch (IOException ex) {\n                // Mention file name in the exception\n                throw new IOException(\"Failed to load \" + archive, ex);\n            }\n        }\n        return PluginWrapper.computeShortName(manifest, archive.getName());\n    }\n\n    private static boolean isLinked(File archive) {","sourceCodeStart":80,"sourceCodeEnd":116,"githubUrl":"https://github.com/jenkinsci/jenkins/blob/2e228ff40b14dbc8b14ffbc6edf0e4383cf744fc/core/src/main/java/hudson/ClassicPluginStrategy.java#L80-L116","documentation":"FileNotFoundException thrown by ClassicPluginStrategy.getShortName when archive.exists() returns false. The plugin archive path supplied to load does not point to an existing filesystem entry, so Jenkins cannot read a manifest from it.","triggerScenarios":"A plugin install path resolves to a missing file: the .hpi/.jpi was deleted between scheduling and loading, a relative path was resolved against the wrong working directory, or a dangling symlink was passed.","commonSituations":"Plugin file removed during startup; custom plugins directory pointing at a stale/symlinked path; deployment pipeline copied a path that does not exist on this node.","solutions":["Verify the plugin archive path exists on the node running Jenkins (ls -l on the absolute path).","Correct the plugins directory / custom plugin location configuration so it points at a real directory.","Re-download or redeploy the plugin file before starting Jenkins."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"File archive = new File(path);\nif (!archive.exists()) {\n    throw new FileNotFoundException(\"Plugin archive not found: \" + archive.getAbsolutePath());\n}","typeGuard":null,"tryCatchPattern":"try {\n    strategy.getShortName(archive);\n} catch (FileNotFoundException e) {\n    // log the absolute path and skip this plugin rather than aborting startup\n}","preventionTips":["Use absolute paths for plugin archives in custom locations.","Validate the plugins directory contents before startup.","Avoid deleting plugin files while Jenkins is booting."],"tags":["jenkins","plugin-loading","filesystem","missing-file"],"backgroundTag":null,"analyzedSha":"2e228ff40b14dbc8b14ffbc6edf0e4383cf744fc","analyzedAt":"2026-08-14T07:07:15.274Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}