{"record":{"id":"601889d79765c42c","repo":"halo-dev/halo","slug":"unable-to-find-plugin-descriptor-file","errorCode":null,"errorMessage":"Unable to find plugin descriptor file '{}'","messagePattern":"Unable to find plugin descriptor file '(.+?)'","errorType":"exception","errorClass":"PluginRuntimeException","httpStatus":null,"severity":"error","filePath":"application/src/main/java/run/halo/app/plugin/YamlPluginFinder.java","lineNumber":99,"sourceCode":"                throw new PluginRuntimeException(\"Cannot find the plugin manifest path\");\n            }\n\n            log.debug(\"Lookup plugin descriptor in '{}'\", propertiesPath);\n            if (Files.notExists(propertiesPath)) {\n                throw new PluginRuntimeException(\"Cannot find '{}' path\", propertiesPath);\n            }\n            Resource propertyResource = new FileSystemResource(propertiesPath);\n            return unstructuredToPlugin(propertyResource);\n        } finally {\n            FileUtils.closePath(propertiesPath);\n        }\n    }\n\n    protected Plugin unstructuredToPlugin(Resource propertyResource) {\n        YamlUnstructuredLoader yamlUnstructuredLoader = new YamlUnstructuredLoader(propertyResource);\n        List<Unstructured> unstructuredList = yamlUnstructuredLoader.load();\n        if (unstructuredList.size() != 1) {\n            throw new PluginRuntimeException(\"Unable to find plugin descriptor file '{}'\", propertiesFileName);\n        }\n        Unstructured unstructured = unstructuredList.get(0);\n        return Unstructured.OBJECT_MAPPER.convertValue(unstructured, Plugin.class);\n    }\n\n    protected Path getManifestPath(Path pluginPath, String propertiesFileName) {\n        if (Files.isDirectory(pluginPath)) {\n            for (String location : PLUGIN_CLASSPATH.getClassesDirectories()) {\n                var path = pluginPath.resolve(location).resolve(propertiesFileName);\n                Resource propertyResource = new FileSystemResource(path);\n                if (propertyResource.exists()) {\n                    return path;\n                }\n            }\n            throw new PluginRuntimeException(\"Unable to find plugin descriptor file: \" + DEFAULT_PROPERTIES_FILE_NAME);\n        } else {\n            // it's a jar file\n            try {","sourceCodeStart":81,"sourceCodeEnd":117,"githubUrl":"https://github.com/halo-dev/halo/blob/d2f5165f9c8f055ffcb3fa9c3f4032821a7b68c8/application/src/main/java/run/halo/app/plugin/YamlPluginFinder.java#L81-L117","documentation":"Error \"Unable to find plugin descriptor file '{}'\" thrown in halo-dev/halo.","triggerScenarios":"Thrown at application/src/main/java/run/halo/app/plugin/YamlPluginFinder.java:99 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add a plugin.yaml (or plugin.yml) descriptor file at the root of the plugin JAR or directory.","Rebuild the plugin with the Halo plugin Gradle/Maven tooling so the descriptor is generated and packaged.","Check that the descriptor file name matches exactly (plugin.yaml), including case."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"d2f5165f9c8f055ffcb3fa9c3f4032821a7b68c8","analyzedAt":"2026-08-14T00:18:38.915Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}