quarkusio/quarkus · error · BootstrapMavenException

Failed to resolve dependencies for ${artifact}

Error message

Failed to resolve dependencies for ${artifact}

What it means

resolveRuntimeDeps builds a dependency-collection request and asks the Maven Resolver for the runtime dependency graph. On DependencyCollectionException it throws BootstrapMavenException "Failed to resolve dependencies for <artifact>", naming whichever root artifact was requested.

Source

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

     */
    private DependencyNode resolveRuntimeDeps(CollectRequest request)
            throws AppModelResolverException {

        var ctx = new BootstrapMavenContext(BootstrapMavenContext.config()
                .setRepositorySystem(resolver.getSystem())
                .setRepositorySystemSession(getSessionWithDirectDepsCollector())
                .setRemoteRepositories(resolver.getRepositories())
                .setRemoteRepositoryManager(resolver.getRemoteRepositoryManager())
                .setCurrentProject(resolver.getMavenContext().getCurrentProject())
                // no need to discover the workspace in case the current project isn't available
                .setWorkspaceDiscovery(resolver.getMavenContext().getCurrentProject() != null));
        resolver = new MavenArtifactResolver(ctx);

        try {
            return resolver.getSystem().collectDependencies(resolver.getSession(), request).getRoot();
        } catch (DependencyCollectionException e) {
            final Artifact a = request.getRoot() == null ? request.getRootArtifact() : request.getRoot().getArtifact();
            throw new BootstrapMavenException("Failed to resolve dependencies for " + a, e);
        }
    }

    private DefaultRepositorySystemSession getSessionWithDirectDepsCollector() {
        final RepositorySystemSession session = resolver.getSession();
        final DefaultRepositorySystemSession mutableSession = new DefaultRepositorySystemSession(session);
        mutableSession.setDependencySelector(
                new DirectDependencyCollectorFactory(session.getDependencySelector(), dependencyMap));
        return mutableSession;
    }

    private boolean isRuntimeArtifact(ArtifactKey key) {
        final ResolvedDependencyBuilder dep = appBuilder.getDependency(key);
        return dep != null && dep.isFlagSet(DependencyFlags.RUNTIME_CP);
    }

    private void processRuntimeDeps(DependencyNode root) {
        final AppDep appRoot = new AppDep(root);

View on GitHub (pinned to e1c734241f)

Solutions

  1. Check the wrapped cause for repository errors (connection refused, 401/404) and fix network/proxy/settings.xml.
  2. Verify the root artifact and its dependencies exist at the requested versions.
  3. Clear corrupted ~/.m2/repository entries for the failing artifacts and retry with `mvn -U`.
  4. If offline, ensure all runtime dependencies are already cached locally.

Example fix

// before
mvn quarkus:dev -Dquarkus.platform.version=999-nonexistent
// after
mvn quarkus:dev -Dquarkus.platform.version=3.15.0
Defensive patterns

Strategy: retry

Validate before calling

// Check network access to configured repositories before resolving:
for (var repo : repos) {
    var conn = new java.net.URL(repo.getUrl()).openConnection();
    conn.setConnectTimeout(3000);
    conn.connect(); // throws if unreachable
}

Type guard

static boolean hasLocalCopy(MavenArtifactResolver mvn, org.eclipse.aether.artifact.Artifact a) {
    return mvn.getSession().getLocalRepositoryManager()
        .find(mvn.getSession(), new LocalArtifactRequest().setArtifact(a).setContext("")).getFile() != null;
}

Try / catch

try {
    model = resolver.resolveModel(coords);
} catch (BootstrapMavenException e) {
    if (e.getMessage().startsWith("Failed to resolve dependencies for")) {
        // transient network errors are common: retry once with -U semantics
        log.warn("Retrying dependency resolution after failure: " + e.getMessage());
    }
    throw e;
}

Prevention

When it happens

Trigger: resolveRuntimeDeps (called from root/ModelResolutionTaskRunner) when collectDependencies fails — unreachable remote repository, unresolvable dependency in the runtime graph, corrupt cached POM, or invalid dependency metadata.

Common situations: Corporate proxy/firewall blocking repo access; missing mirror configuration; a snapshot dependency whose remote metadata cannot be fetched; version range with no match.

Related errors


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