quarkusio/quarkus · error · BootstrapDependencyProcessingException

Quarkus extension deployment artifact does not appear to de

Error message

Quarkus extension deployment artifact  does not appear to depend on the corresponding runtime artifact 

What it means

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.

Source

Thrown at independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/ApplicationDependencyTreeResolver.java:639

            throws BootstrapDependencyProcessingException {
        log.debugf("Injecting deployment dependency %s", extDep.info.deploymentArtifact);
        final DependencyNode deploymentNode = collectDependencies(extDep.info.deploymentArtifact, extDep.exclusions,
                extDep.runtimeNode.getRepositories());
        if (deploymentNode.getChildren().isEmpty()) {
            throw new BootstrapDependencyProcessingException(
                    "Failed to collect dependencies of " + deploymentNode.getArtifact()
                            + ": either its POM could not be resolved from the available Maven repositories "
                            + "or the artifact does not have any dependencies while at least a dependency on the runtime artifact "
                            + extDep.info.runtimeArtifact + " is expected");
        }

        if (resolver.getProjectModuleResolver() != null && collectReloadableModules) {
            clearReloadable(deploymentNode);
        }

        extDep.replaceRuntimeExtensionNodes(deploymentNode);
        if (!extDep.presentInTargetGraph) {
            throw new BootstrapDependencyProcessingException(
                    "Quarkus extension deployment artifact " + deploymentNode.getArtifact()
                            + " does not appear to depend on the corresponding runtime artifact "
                            + extDep.info.runtimeArtifact);
        }

        final DependencyNode runtimeNode = extDep.runtimeNode;
        runtimeNode.setData(QUARKUS_RUNTIME_ARTIFACT, runtimeNode.getArtifact());
        runtimeNode.setArtifact(deploymentNode.getArtifact());
        runtimeNode.getDependency().setArtifact(deploymentNode.getArtifact());
        runtimeNode.setChildren(deploymentNode.getChildren());
    }

    private void clearReloadable(DependencyNode node) {
        for (DependencyNode child : node.getChildren()) {
            clearReloadable(child);
        }
        final ResolvedDependencyBuilder dep = appBuilder.getDependency(getKey(node.getArtifact()));
        if (dep != null) {

View on GitHub (pinned to e1c734241f)

Solutions

  1. Inspect the deployment artifact's effective POM (mvn dependency:tree -f ...-deployment) and confirm a dependency on the runtime artifact
  2. Remove exclusions or dependencyManagement overrides that drop the runtime artifact from the graph
  3. Align extension runtime/deployment versions — never manage runtime and deployment versions independently
  4. Rebuild/re-publish the deployment artifact with a proper dependency on the runtime artifact

Example fix

// before: managed version forces different runtime version
dependencyManagement pins acme-quarkus-extension:0.9.0 while deployment is 1.0.0
// after
Remove the override or pin both to 1.0.0
Defensive patterns

Strategy: validation

Validate before calling

// Pre-check: deployment POM must depend on the runtime artifact with matching version
// mvn -f acme-quarkus-extension-deployment/pom.xml dependency:tree | grep acme-quarkus-extension$
// In BOM usage, ensure both are managed together:
// <dependency><groupId>com.acme</groupId><artifactId>acme-quarkus-extension-bom</artifactId>...

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/449cd166368c24ba. Report an issue: GitHub.