{"record":{"id":"bf4b74236373b47d","repo":"quarkusio/quarkus","slug":"failed-to-parse-quarkus-extension-metadata-path","errorCode":null,"errorMessage":"Failed to parse Quarkus extension metadata ${path}","messagePattern":"Failed to parse Quarkus extension metadata (.+?)","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/CreateProjectHelper.java","lineNumber":85,"sourceCode":"    public static ExtensionCatalog completeCatalog(ExtensionCatalog catalog, Collection<String> extensions,\n            MavenArtifactResolver mvn) {\n        ExtensionCatalog.Mutable mutableCatalog = null;\n        for (String extArg : extensions) {\n            if (isFullArtifactCoords(extArg)) {\n                var coords = ArtifactCoords.fromString(extArg.trim());\n                final Path extJar;\n                try {\n                    extJar = mvn.resolve(new DefaultArtifact(coords.getGroupId(), coords.getArtifactId(),\n                            coords.getClassifier(), coords.getType(), coords.getVersion())).getArtifact().getFile().toPath();\n                } catch (BootstrapMavenException e) {\n                    throw new RuntimeException(\"Failed to resolve extension \" + coords, e);\n                }\n                final Extension ext = ExtensionMetadataUtil.applyExtensionMetadata(\n                        PathTree.ofDirectoryOrArchive(extJar), visit -> {\n                            try {\n                                return Extension.fromFile(visit.getPath());\n                            } catch (IOException e) {\n                                throw new IllegalStateException(\n                                        \"Failed to parse Quarkus extension metadata \" + visit.getPath());\n                            }\n                        });\n                if (ext != null) {\n                    if (mutableCatalog == null) {\n                        mutableCatalog = catalog.mutable();\n                    }\n                    var i = mutableCatalog.getExtensions().iterator();\n                    boolean add = true;\n                    while (i.hasNext()) {\n                        final ArtifactCoords catalogCoords = i.next().getArtifact();\n                        if (catalogCoords.getKey().equals(ext.getArtifact().getKey())) {\n                            if (catalogCoords.getVersion().equals(ext.getArtifact().getVersion())) {\n                                add = false;\n                            } else {\n                                i.remove();\n                            }\n                            break;","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/CreateProjectHelper.java#L67-L103","documentation":"After the extension jar is resolved, completeCatalog reads its embedded Quarkus extension metadata (quarkus-extension.yaml). If reading that file throws an IOException, the metadata visitor throws this IllegalStateException, meaning the artifact exists but its Quarkus extension metadata could not be parsed/read.","triggerScenarios":"completeCatalog applying extension metadata to a resolved jar via ExtensionMetadataUtil when Extension.fromFile throws IOException on the metadata path (corrupt jar, unreadable archive entry, malformed file entry).","commonSituations":"Corrupted or partially downloaded jar in the local Maven repository; jar not being a valid Quarkus extension archive; filesystem permission problems reading the extracted entry.","solutions":["Delete the corrupted artifact from the local Maven repository and re-resolve it","Verify the jar contains META-INF/quarkus-extension.yaml and is a valid zip","Check file permissions on the local repository path","Confirm the artifact was actually built/published as a Quarkus extension"],"exampleFix":"// clear corrupted cached artifact\nrm -rf ~/.m2/repository/com/acme/acme-extension/1.0.0\n// then re-run the create project command to re-download","handlingStrategy":"try-catch","validationCode":"Path jar = resolvedJar;\ntry (var fs = new java.util.zip.ZipFile(jar.toFile())) { if (fs.getEntry(\"META-INF/quarkus-extension.yaml\") == null) throw new IllegalStateException(\"not a quarkus extension jar\"); }","typeGuard":null,"tryCatchPattern":"try { helper.completeCatalog(...); } catch (IllegalStateException e) { if (e.getMessage().startsWith(\"Failed to parse Quarkus extension metadata\")) { deleteAndReDownloadArtifact(); } }","preventionTips":["Clear corrupted artifacts from the local Maven repository","Confirm the jar contains META-INF/quarkus-extension.yaml","Check local repository disk integrity and permissions"],"tags":["metadata","jar","io"],"backgroundTag":"extension-metadata-parse-failed","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"}