quarkusio/quarkus · critical · IllegalStateException

Failed to initialize Maven context

Error message

Failed to initialize Maven context

What it means

Wraps BootstrapMavenException thrown while constructing a MavenArtifactResolver, meaning the underlying Maven context (settings.xml, local repo, POM) could not be initialized. The registry client cannot resolve any artifacts without this context, so initialization fails fast with an IllegalStateException.

Source

Thrown at independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/client/maven/MavenRegistryClientFactory.java:420

    }

    private static MavenArtifactResolver newResolver(MavenArtifactResolver resolver, List<RemoteRepository> aggregatedRepos,
            RegistryConfig config, MessageWriter log) {
        try {
            final LocalProject currentProject = resolver.getMavenContext().getCurrentProject();
            final BootstrapMavenContext mvnCtx = new BootstrapMavenContext(
                    BootstrapMavenContext.config()
                            .setRepositorySystem(resolver.getSystem())
                            .setRepositorySystemSession(setRegistryTransferListener(config, log, resolver.getSession()))
                            .setRemoteRepositoryManager(resolver.getRemoteRepositoryManager())
                            .setRemoteRepositories(aggregatedRepos)
                            .setLocalRepository(resolver.getMavenContext().getLocalRepo())
                            .setCurrentProject(currentProject)
                            // if the currentProject is null, workspace discovery should still be disabled
                            .setWorkspaceDiscovery(currentProject != null));
            return new MavenArtifactResolver(mvnCtx);
        } catch (BootstrapMavenException e) {
            throw new IllegalStateException("Failed to initialize Maven context", e);
        }
    }

    private static DefaultRepositorySystemSession setRegistryTransferListener(RegistryConfig config, MessageWriter log,
            RepositorySystemSession session) {
        final DefaultRepositorySystemSession newSession = new DefaultRepositorySystemSession(session);
        newSession.setTransferListener(new RegistryCacheRefreshLogger(config, log, newSession.getTransferListener()));
        return newSession;
    }

    private List<RemoteRepository> determineRegistryRepos(RegistryConfig config, List<RemoteRepository> configuredRepos) {
        final RegistryMavenConfig mavenConfig = config.getMaven() == null ? null : config.getMaven();
        final RegistryMavenRepoConfig repoConfig = mavenConfig == null ? null : mavenConfig.getRepository();
        final String repoId = repoConfig == null || repoConfig.getId() == null ? config.getId() : repoConfig.getId();
        String repoUrl = repoConfig == null ? null : repoConfig.getUrl();
        if (repoUrl == null || repoUrl.isBlank()) {
            // if the repo URL wasn't configured and there is a repository in the Maven config
            // whose ID matches the registry ID, this is what we are going to use

View on GitHub (pinned to e1c734241f)

Solutions

  1. Inspect the cause (BootstrapMavenException) for the concrete Maven problem — usually an invalid settings.xml or pom.xml line
  2. Validate ~/.m2/settings.xml with `mvn help:effective-settings`
  3. Fix or remove -Dmaven.repo.local overrides and ensure the local repo directory is writable
  4. Run `mvn -U validate` on the current project to confirm the POM itself resolves

Example fix

// before
MavenRegistryClient client = factory.buildRegistryClient(config); // IllegalStateException
// after
try {
    MavenRegistryClient client = factory.buildRegistryClient(config);
} catch (IllegalStateException e) {
    LOGGER.error("Maven context init failed", e.getCause());
}
Defensive patterns

Strategy: try-catch

Validate before calling

// sanity-check Maven env before calling the factory
Path settings = Path.of(System.getProperty("user.home"), ".m2", "settings.xml");
if (Files.exists(settings)) { /* validate XML */ }
String repoLocal = System.getProperty("maven.repo.local");
if (repoLocal != null && !Files.isWritable(Path.of(repoLocal))) throw new IllegalStateException("maven.repo.local not writable");

Try / catch

try { client = factory.buildRegistryClient(cfg); } catch (IllegalStateException e) { Throwable cause = e.getCause(); log.error("Maven context init failed: " + cause.getMessage(), cause); }

Prevention

When it happens

Trigger: MavenRegistryClientFactory.newResolver, called from buildRegistryClient or getPlatformExtensionsResolver, when MavenRunner/MavenArtifactResolver construction fails — invalid ~/.m2/settings.xml, unresolvable parent POM for currentProject, or corrupt local repository path.

Common situations: Malformed settings.xml (bad XML, unreachable mirrors), -Dmaven.repo.local pointing to a non-writable path, a broken pom.xml passed as the current project, or Maven version incompatibilities in CI.

Related errors


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