quarkusio/quarkus · error · AppModelResolverException

Failed to inject extension deployment dependencies for ${app

Error message

Failed to inject extension deployment dependencies for ${appArtifact}

What it means

After resolving the dependency graph, buildAppModel invokes the extension dependency injection machinery to add extension deployment (build-time) artifacts to the application model. If a BootstrapDependencyProcessingException occurs during that injection, it is wrapped in this AppModelResolverException identifying the application artifact.

Source

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

            } else {
                ApplicationDependencyResolver.newInstance()
                        .setArtifactResolver(mvn)
                        .setApplicationModelBuilder(appBuilder)
                        .setCollectReloadableModules(collectReloadableDeps && reloadableModules.isEmpty())
                        .setCollectCompileOnly(filteredProvidedDeps)
                        .setDependencyLogging(depLogConfig)
                        .setRuntimeModelOnly(runtimeModelOnly)
                        .setDevMode(devmode)
                        .setManagedDependencies(managedDeps)
                        .resolve(collectRtDepsRequest);
            }
            if (logTime) {
                System.err.println(
                        "Application model resolved in " + (System.currentTimeMillis() - start) + "ms, legacy="
                                + legacyModelResolver);
            }
        } catch (BootstrapDependencyProcessingException e) {
            throw new AppModelResolverException(
                    "Failed to inject extension deployment dependencies for " + appArtifact.toCompactCoords(), e);
        }

        return appBuilder.build();
    }

    private io.quarkus.maven.dependency.ResolvedDependencyBuilder resolve(ArtifactCoords coords, Artifact artifact,
            List<RemoteRepository> aggregatedRepos) throws BootstrapMavenException {

        final ResolvedDependencyBuilder depBuilder;
        if (ResolvedDependencyBuilder.class.isAssignableFrom(coords.getClass())) {
            depBuilder = (ResolvedDependencyBuilder) coords;
        } else {
            depBuilder = ResolvedDependencyBuilder.newInstance().setCoords(coords);
            if (coords instanceof ResolvedDependency resolved) {
                depBuilder.setResolvedPaths(resolved.getResolvedPaths());
            }
        }

View on GitHub (pinned to e1c734241f)

Solutions

  1. Read the wrapped cause `e` to find which extension's deployment dependency failed.
  2. Run `mvn -U` (force update) or clear the offending artifact from ~/.m2/repository and re-resolve.
  3. Ensure all Quarkus extensions in the dependency tree have their `-deployment` artifacts available in the configured repositories.
  4. Align all Quarkus extension versions to a single Quarkus BOM version to avoid mixed-version deployment artifacts.

Example fix

// before
<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-hibernate-orm</artifactId>
  <version>3.2.0</version> <!-- mixed with 3.15 core -->
</dependency>
// after
Use the Quarkus BOM and drop explicit versions:
<dependencyManagement><dependencies><dependency>
  <groupId>io.quarkus</groupId><artifactId>quarkus-bom</artifactId>
  <version>3.15.0</version><type>pom</type><scope>import</scope>
</dependency></dependencies></dependencyManagement>
Defensive patterns

Strategy: try-catch

Validate before calling

// Pre-check that every runtime extension in the tree has a resolvable -deployment artifact:
for (var dep : runtimeDeps) {
    var deployment = new DefaultArtifact(dep.getGroupId(), dep.getArtifactId() + "-deployment", null, "jar", dep.getVersion());
    boolean found = mvn.getSystem().resolveArtifact(mvn.getSession(),
        new ArtifactRequest().setArtifact(deployment).setRepositories(repos)) != null;
}

Type guard

static boolean looksLikeQuarkusExtension(org.eclipse.aether.artifact.Artifact a) {
    return a.getFile() != null && new java.io.File(a.getFile().getParentFile(), "quarkus-extension.properties").exists();
}

Try / catch

try {
    model = resolver.resolveModel(module);
} catch (AppModelResolverException e) {
    if (e.getMessage().startsWith("Failed to inject extension deployment dependencies")) {
        log.error("Extension deployment injection failed; cause: " + e.getCause(), e);
        // suggest: mvn -U, align versions via quarkus-bom
    }
    throw e;
}

Prevention

When it happens

Trigger: buildAppModel (called from resolveModel/doResolveModel) catches BootstrapDependencyProcessingException thrown while injecting deployment dependencies of Quarkus extensions into the app model.

Common situations: A broken or incompatible extension on the classpath (missing deployment artifact in the repository); corrupted local Maven cache; an extension descriptor (quarkus-extension.properties) referencing a deployment artifact that cannot be resolved.

Related errors


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