{"record":{"id":"5c15e46663166ac1","repo":"quarkusio/quarkus","slug":"failed-to-locate-meta-inf-quarkus-properties-in","errorCode":null,"errorMessage":"Failed to locate META-INF/quarkus.properties in ${runtimeExtCompactCoords}","messagePattern":"Failed to locate META-INF/quarkus\\.properties in (.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/DevUIProcessor.java","lineNumber":1077,"sourceCode":"            if (extPropsVisit == null) {\n                return null;\n            }\n            final Properties props = new Properties();\n            try (BufferedReader reader = Files.newBufferedReader(extPropsVisit.getPath())) {\n                props.load(reader);\n            } catch (IOException e) {\n                throw new RuntimeException(\"Failed to read \" + extPropsVisit.getUrl(), e);\n            }\n            final String deploymentCoords = props.getProperty(BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT);\n            if (deploymentCoords == null) {\n                throw new RuntimeException(\n                        \"Failed to locate \" + BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT + \" in \" + extPropsVisit.getUrl());\n            }\n            var coords = GACTV.fromString(deploymentCoords);\n            return new GACT(coords.getGroupId(), coords.getArtifactId(), coords.getClassifier(), coords.getType());\n        });\n        if (result == null) {\n            throw new RuntimeException(\"Failed to locate \" + BootstrapConstants.DESCRIPTOR_PATH\n                    + \" in \" + runtimeExt.toCompactCoords());\n        }\n        return result;\n    }\n\n    @BuildStep(onlyIf = IsLocalDevelopment.class)\n    void createAllRoutes(WebJarResultsBuildItem webJarResultsBuildItem,\n            LaunchModeBuildItem launchModeBuildItem,\n            List<DevUIWebJarBuildItem> devUIWebJarBuiltItems,\n            BuildProducer<DevUIRoutesBuildItem> devUIRoutesProducer) {\n\n        if (launchModeBuildItem.isNotLocalDevModeType()) {\n            return;\n        }\n\n        for (DevUIWebJarBuildItem devUIWebJarBuiltItem : devUIWebJarBuiltItems) {\n            WebJarResultsBuildItem.WebJarResult result = webJarResultsBuildItem\n                    .byArtifactKey(devUIWebJarBuiltItem.getArtifactKey());","sourceCodeStart":1059,"sourceCodeEnd":1095,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/DevUIProcessor.java#L1059-L1095","documentation":"DevUIProcessor collects deployment coordinates by reading META-INF/quarkus.properties from each runtime extension artifact; the lookup returns null when no artifact on the classpath contains that descriptor file. This is thrown after the deployment-artifact scan fails to match the given runtime extension. It means a required Quarkus extension's runtime JAR lacks its extension descriptor.","triggerScenarios":"The blocking call over extension quarkus.properties files returns no match for the runtime extension's coordinates, so result == null when building the GACT list for Dev UI; thrown with the runtime extension's compact coordinates in the message.","commonSituations":"A custom/in-house runtime JAR packaged without META-INF/quarkus.properties; a jar-in-jar or shaded deployment that dropped the descriptor; classpath ordering issues in a fat-jar; mixing extension versions so the runtime artifact doesn't match any scanned descriptor.","solutions":["Rebuild the extension named in the message with the standard Quarkus extension parent POM so the quarkus-maven-plugin generates META-INF/quarkus.properties.","Verify the runtime JAR actually contains META-INF/quarkus.properties: unzip -l <runtime-jar> | grep quarkus.properties.","Check for version mismatches between the runtime and deployment artifacts of that extension and align them with the Quarkus BOM.","Clean stale artifacts: remove the module from ~/.m2 and run ./mvnw clean install."],"exampleFix":"// before (extension runtime pom.xml using plain maven-jar packaging, no descriptor)\n<packaging>jar</packaging>\n\n// after\n<parent>\n  <groupId>io.quarkus</groupId>\n  <artifactId>quarkus-extension-parent</artifactId>\n</parent>\n<packaging>jar</packaging> <!-- quarkus-extension-maven-plugin injects META-INF/quarkus.properties -->","handlingStrategy":"validation","validationCode":"URL desc = classLoader.getResource(\"META-INF/quarkus.properties\");\nif (desc == null) {\n    throw new IllegalStateException(\"Runtime extension JAR is missing META-INF/quarkus.properties: \" + runtimeExt.toCompactCoords());\n}","typeGuard":null,"tryCatchPattern":"try { ... } catch (RuntimeException e) {\n    if (e.getMessage().startsWith(\"Failed to locate META-INF/quarkus.properties\")) {\n        log.errorf(\"Rebuild the extension %s with quarkus-extension tooling\", e.getMessage());\n    } else throw e;\n}","preventionTips":["Run 'unzip -l <jar> | grep quarkus.properties' as a CI check for extension JARs","Use quarkus-extension-maven-plugin in runtime module builds","Avoid shading/repackaging extension JARs"],"tags":["devui","quarkus-extension","missing-descriptor","classpath"],"backgroundTag":"missing-extension-descriptor-property","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}