{"record":{"id":"37c3daaa23b00317","repo":"quarkusio/quarkus","slug":"failed-to-initialize-maven-context","errorCode":null,"errorMessage":"Failed to initialize Maven context","messagePattern":"Failed to initialize Maven context","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"critical","filePath":"independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/client/maven/MavenRegistryClientFactory.java","lineNumber":420,"sourceCode":"    }\n\n    private static MavenArtifactResolver newResolver(MavenArtifactResolver resolver, List<RemoteRepository> aggregatedRepos,\n            RegistryConfig config, MessageWriter log) {\n        try {\n            final LocalProject currentProject = resolver.getMavenContext().getCurrentProject();\n            final BootstrapMavenContext mvnCtx = new BootstrapMavenContext(\n                    BootstrapMavenContext.config()\n                            .setRepositorySystem(resolver.getSystem())\n                            .setRepositorySystemSession(setRegistryTransferListener(config, log, resolver.getSession()))\n                            .setRemoteRepositoryManager(resolver.getRemoteRepositoryManager())\n                            .setRemoteRepositories(aggregatedRepos)\n                            .setLocalRepository(resolver.getMavenContext().getLocalRepo())\n                            .setCurrentProject(currentProject)\n                            // if the currentProject is null, workspace discovery should still be disabled\n                            .setWorkspaceDiscovery(currentProject != null));\n            return new MavenArtifactResolver(mvnCtx);\n        } catch (BootstrapMavenException e) {\n            throw new IllegalStateException(\"Failed to initialize Maven context\", e);\n        }\n    }\n\n    private static DefaultRepositorySystemSession setRegistryTransferListener(RegistryConfig config, MessageWriter log,\n            RepositorySystemSession session) {\n        final DefaultRepositorySystemSession newSession = new DefaultRepositorySystemSession(session);\n        newSession.setTransferListener(new RegistryCacheRefreshLogger(config, log, newSession.getTransferListener()));\n        return newSession;\n    }\n\n    private List<RemoteRepository> determineRegistryRepos(RegistryConfig config, List<RemoteRepository> configuredRepos) {\n        final RegistryMavenConfig mavenConfig = config.getMaven() == null ? null : config.getMaven();\n        final RegistryMavenRepoConfig repoConfig = mavenConfig == null ? null : mavenConfig.getRepository();\n        final String repoId = repoConfig == null || repoConfig.getId() == null ? config.getId() : repoConfig.getId();\n        String repoUrl = repoConfig == null ? null : repoConfig.getUrl();\n        if (repoUrl == null || repoUrl.isBlank()) {\n            // if the repo URL wasn't configured and there is a repository in the Maven config\n            // whose ID matches the registry ID, this is what we are going to use","sourceCodeStart":402,"sourceCodeEnd":438,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/client/maven/MavenRegistryClientFactory.java#L402-L438","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Inspect the cause (BootstrapMavenException) for the concrete Maven problem — usually an invalid settings.xml or pom.xml line","Validate ~/.m2/settings.xml with `mvn help:effective-settings`","Fix or remove -Dmaven.repo.local overrides and ensure the local repo directory is writable","Run `mvn -U validate` on the current project to confirm the POM itself resolves"],"exampleFix":"// before\nMavenRegistryClient client = factory.buildRegistryClient(config); // IllegalStateException\n// after\ntry {\n    MavenRegistryClient client = factory.buildRegistryClient(config);\n} catch (IllegalStateException e) {\n    LOGGER.error(\"Maven context init failed\", e.getCause());\n}","handlingStrategy":"try-catch","validationCode":"// sanity-check Maven env before calling the factory\nPath settings = Path.of(System.getProperty(\"user.home\"), \".m2\", \"settings.xml\");\nif (Files.exists(settings)) { /* validate XML */ }\nString repoLocal = System.getProperty(\"maven.repo.local\");\nif (repoLocal != null && !Files.isWritable(Path.of(repoLocal))) throw new IllegalStateException(\"maven.repo.local not writable\");","typeGuard":null,"tryCatchPattern":"try { client = factory.buildRegistryClient(cfg); } catch (IllegalStateException e) { Throwable cause = e.getCause(); log.error(\"Maven context init failed: \" + cause.getMessage(), cause); }","preventionTips":["Keep ~/.m2/settings.xml valid; run mvn help:effective-settings in CI","Avoid bogus -Dmaven.repo.local values","Ensure the current project POM resolves before invoking registry clients"],"tags":["maven","initialization","settings"],"backgroundTag":"maven-context-initialization-failed","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}