{"record":{"id":"449cd166368c24ba","repo":"quarkusio/quarkus","slug":"quarkus-extension-deployment-artifact-does-not-ap-449cd1","errorCode":null,"errorMessage":"Quarkus extension deployment artifact  does not appear to depend on the corresponding runtime artifact ","messagePattern":"Quarkus extension deployment artifact  does not appear to depend on the corresponding runtime artifact ","errorType":"exception","errorClass":"BootstrapDependencyProcessingException","httpStatus":null,"severity":"error","filePath":"independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/ApplicationDependencyTreeResolver.java","lineNumber":639,"sourceCode":"            throws BootstrapDependencyProcessingException {\n        log.debugf(\"Injecting deployment dependency %s\", extDep.info.deploymentArtifact);\n        final DependencyNode deploymentNode = collectDependencies(extDep.info.deploymentArtifact, extDep.exclusions,\n                extDep.runtimeNode.getRepositories());\n        if (deploymentNode.getChildren().isEmpty()) {\n            throw new BootstrapDependencyProcessingException(\n                    \"Failed to collect dependencies of \" + deploymentNode.getArtifact()\n                            + \": either its POM could not be resolved from the available Maven repositories \"\n                            + \"or the artifact does not have any dependencies while at least a dependency on the runtime artifact \"\n                            + extDep.info.runtimeArtifact + \" is expected\");\n        }\n\n        if (resolver.getProjectModuleResolver() != null && collectReloadableModules) {\n            clearReloadable(deploymentNode);\n        }\n\n        extDep.replaceRuntimeExtensionNodes(deploymentNode);\n        if (!extDep.presentInTargetGraph) {\n            throw new BootstrapDependencyProcessingException(\n                    \"Quarkus extension deployment artifact \" + deploymentNode.getArtifact()\n                            + \" does not appear to depend on the corresponding runtime artifact \"\n                            + extDep.info.runtimeArtifact);\n        }\n\n        final DependencyNode runtimeNode = extDep.runtimeNode;\n        runtimeNode.setData(QUARKUS_RUNTIME_ARTIFACT, runtimeNode.getArtifact());\n        runtimeNode.setArtifact(deploymentNode.getArtifact());\n        runtimeNode.getDependency().setArtifact(deploymentNode.getArtifact());\n        runtimeNode.setChildren(deploymentNode.getChildren());\n    }\n\n    private void clearReloadable(DependencyNode node) {\n        for (DependencyNode child : node.getChildren()) {\n            clearReloadable(child);\n        }\n        final ResolvedDependencyBuilder dep = appBuilder.getDependency(getKey(node.getArtifact()));\n        if (dep != null) {","sourceCodeStart":621,"sourceCodeEnd":657,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/ApplicationDependencyTreeResolver.java#L621-L657","documentation":"Thrown as a BootstrapDependencyProcessingException by injectDeploymentDependencies after the deployment tree replaces runtime extension nodes: if the runtime extension node is not present anywhere in the (managed/exclusion-adjusted) deployment tree, Quarkus cannot safely swap it in and throws. It indicates the deployment artifact does not depend on its runtime counterpart.","triggerScenarios":"Deployment artifact collected successfully and its tree is non-empty, but extDep.presentInTargetGraph is false — i.e. version conflicts/exclusions/managed-dependency overrides removed the runtime artifact from the deployment graph, or the deployment POM genuinely lacks the runtime dependency.","commonSituations":"A BOM/dependencyManagement pins a different runtime artifact version so unification drops the node; user added an exclusion of the runtime artifact; hand-written deployment POM without the runtime dependency; partially applied version upgrades of an extension.","solutions":["Inspect the deployment artifact's effective POM (mvn dependency:tree -f ...-deployment) and confirm a dependency on the runtime artifact","Remove exclusions or dependencyManagement overrides that drop the runtime artifact from the graph","Align extension runtime/deployment versions — never manage runtime and deployment versions independently","Rebuild/re-publish the deployment artifact with a proper dependency on the runtime artifact"],"exampleFix":"// before: managed version forces different runtime version\ndependencyManagement pins acme-quarkus-extension:0.9.0 while deployment is 1.0.0\n// after\nRemove the override or pin both to 1.0.0","handlingStrategy":"validation","validationCode":"// Pre-check: deployment POM must depend on the runtime artifact with matching version\n// mvn -f acme-quarkus-extension-deployment/pom.xml dependency:tree | grep acme-quarkus-extension$\n// In BOM usage, ensure both are managed together:\n// <dependency><groupId>com.acme</groupId><artifactId>acme-quarkus-extension-bom</artifactId>...","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Import the extension's BOM rather than managing runtime/deployment versions separately","Never exclude the runtime artifact from a deployment dependency","Keep extension runtime and deployment artifacts at identical versions","Run mvn dependency:tree on the deployment module when upgrading extensions"],"tags":["maven","quarkus-extensions","version-conflict"],"backgroundTag":"extension-runtime-deployment-version-mismatch","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}