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
- Read the wrapped cause `e` to find which extension's deployment dependency failed.
- Run `mvn -U` (force update) or clear the offending artifact from ~/.m2/repository and re-resolve.
- Ensure all Quarkus extensions in the dependency tree have their `-deployment` artifacts available in the configured repositories.
- 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
- Manage all Quarkus extensions through a single quarkus-bom version.
- Keep the local Maven cache healthy; run with -U after failed downloads.
- Only use extensions published with their -deployment artifacts.
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
- Failed to initialize Maven artifact resolver
- Failed to create the application model for
- Failed to resolve dependencies for ${artifact}
- Failed to collect extension information for ${artifact}
- Could not resolve POM for
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/a7672b42176d5512.
Report an issue: GitHub.