{"record":{"id":"722463398e738c12","repo":"quarkusio/quarkus","slug":"extension-descriptor-from-runtimeartifact-does","errorCode":null,"errorMessage":"Extension descriptor from ${runtimeArtifact} does not include deployment-artifact","messagePattern":"Extension descriptor from (.+?) does not include deployment-artifact","errorType":"exception","errorClass":"BootstrapDependencyProcessingException","httpStatus":null,"severity":"error","filePath":"independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/ExtensionInfo.java","lineNumber":67,"sourceCode":"    void ensureActivated(ApplicationModelBuilder appBuilder) {\n        if (activated) {\n            return;\n        }\n        activated = true;\n        appBuilder.handleExtensionProperties(props, getKey(runtimeArtifact));\n\n        final String providesCapabilities = props.getProperty(BootstrapConstants.PROP_PROVIDES_CAPABILITIES);\n        final String requiresCapabilities = props.getProperty(BootstrapConstants.PROP_REQUIRES_CAPABILITIES);\n        if (providesCapabilities != null || requiresCapabilities != null) {\n            appBuilder.addExtensionCapabilities(\n                    CapabilityContract.of(toCompactCoords(runtimeArtifact), providesCapabilities, requiresCapabilities));\n        }\n    }\n\n    private static Artifact initDeploymentArtifact(String deploymentArtifactStr, Artifact runtimeArtifact)\n            throws BootstrapDependencyProcessingException {\n        if (deploymentArtifactStr == null) {\n            throw new BootstrapDependencyProcessingException(\"Extension descriptor from \" + runtimeArtifact\n                    + \" does not include \" + BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT);\n        }\n        final Artifact deploymentArtifact = toArtifact(deploymentArtifactStr);\n        return deploymentArtifact.getVersion() == null || deploymentArtifact.getVersion().isEmpty()\n                ? deploymentArtifact.setVersion(runtimeArtifact.getVersion())\n                : deploymentArtifact;\n    }\n\n    private Artifact[] initConditionalDeps(boolean devMode) throws BootstrapDependencyProcessingException {\n        return devMode\n                ? toArtifactArray(\n                        joinAndDedupe(splitConditionalDeps(props.getProperty(BootstrapConstants.CONDITIONAL_DEPENDENCIES)),\n                                splitConditionalDeps(props.getProperty(BootstrapConstants.CONDITIONAL_DEV_DEPENDENCIES))),\n                        runtimeArtifact)\n                : toArtifactArray(splitConditionalDeps(props.getProperty(BootstrapConstants.CONDITIONAL_DEPENDENCIES)),\n                        runtimeArtifact);\n    }\n","sourceCodeStart":49,"sourceCodeEnd":85,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/ExtensionInfo.java#L49-L85","documentation":"ExtensionInfo parses a Quarkus extension's runtime POM properties to find the deployment artifact. This BootstrapDependencyProcessingException is thrown when the extension descriptor (POM properties) lacks the quarkus.extension.deployment-artifact property, so the corresponding deployment artifact cannot be determined.","triggerScenarios":"Creating ExtensionInfo for a runtime artifact whose POM does not define BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT — typically a plain (non-extension) jar mistakenly treated as a Quarkus extension, or an extension built without the quarkus-extension-maven-plugin processing.","commonSituations":"Using an old/custom jar as an extension dependency, extension POMs produced by hand or by old Quarkus versions before the descriptor property existed, misconfigured quarkus-extension-maven-plugin that skipped property injection.","solutions":["Rebuild the extension with quarkus-extension-maven-plugin so the deployment-artifact property is written into the POM","Remove the non-extension jar from extension dependency resolution if it was never a Quarkus extension","Upgrade the extension to a Quarkus version consistent with the platform BOM","Check the runtime POM's <properties> for quarkus.extension.deployment-artifact and add it manually if hand-maintained"],"exampleFix":"// before (extension pom, missing descriptor)\n<properties></properties>\n// after\n<properties>\n  <quarkus.extension.deployment-artifact>com.acme:my-ext-deployment:1.0.0</quarkus.extension.deployment-artifact>\n</properties>","handlingStrategy":"validation","validationCode":"Properties props = readPomProperties(runtimePom);\nString dep = props.getProperty(\"quarkus.extension.deployment-artifact\");\nif (dep == null || dep.isBlank()) {\n    throw new IllegalArgumentException(runtimeArtifact + \" is not a processed Quarkus extension (no deployment-artifact property)\");\n}","typeGuard":"boolean isQuarkusExtension(java.util.Properties pomProps) {\n    return pomProps != null && pomProps.getProperty(\"quarkus.extension.deployment-artifact\") != null;\n}","tryCatchPattern":null,"preventionTips":["Always build extensions with quarkus-extension-maven-plugin","Verify extension POMs contain quarkus.extension.* properties before use","Only register true Quarkus extensions in extension resolution"],"tags":["quarkus","extension-descriptor","maven"],"backgroundTag":"missing-quarkus-deployment-artifact","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"}