{"record":{"id":"73f4343622b0539c","repo":"apache/maven","slug":"extension-or-one-of-its-dependencies-could-not","errorCode":null,"errorMessage":"Extension {} or one of its dependencies could not be resolved: {}","messagePattern":"Extension (.+?) or one of its dependencies could not be resolved: (.+?)","errorType":"exception","errorClass":"ExtensionResolutionException","httpStatus":null,"severity":"error","filePath":"compat/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java","lineNumber":232,"sourceCode":"        try {\n            /* TODO: Enhance the PluginDependenciesResolver to provide a\n             * resolveCoreExtensionAndFlatten method which uses a CoreExtension\n             * object instead of a Plugin as this makes no sense.\n             */\n            Plugin plugin = Plugin.newBuilder()\n                    .groupId(interpolator.apply(extension.getGroupId()))\n                    .artifactId(interpolator.apply(extension.getArtifactId()))\n                    .version(interpolator.apply(extension.getVersion()))\n                    .build();\n\n            DependencyResult result = pluginDependenciesResolver.resolveCoreExtensionAndFlatten(\n                    new org.apache.maven.model.Plugin(plugin), dependencyFilter, repositories, repoSession);\n            return result.getArtifactResults().stream()\n                    .filter(ArtifactResult::isResolved)\n                    .map(ArtifactResult::getArtifact)\n                    .collect(Collectors.toList());\n        } catch (PluginResolutionException | InterpolatorException e) {\n            throw new ExtensionResolutionException(extension, e);\n        }\n    }\n\n    private static UnaryOperator<String> createInterpolator(MavenExecutionRequest request) {\n        Interpolator interpolator = new DefaultInterpolator();\n        UnaryOperator<String> callback = v -> {\n            String r = request.getUserProperties().getProperty(v);\n            if (r == null) {\n                r = request.getSystemProperties().getProperty(v);\n            }\n            return r != null ? r : v;\n        };\n        return v -> interpolator.interpolate(v, callback);\n    }\n\n    static class SimpleSession extends DefaultSession {\n        SimpleSession(\n                MavenSession session,","sourceCodeStart":214,"sourceCodeEnd":250,"githubUrl":"https://github.com/apache/maven/blob/e4093d4e120eac99d6bdce5ba67cace2f3085c97/compat/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java#L214-L250","documentation":"BootstrapCoreExtensionManager resolves each .mvn/extensions.xml entry (groupId:artifactId:version, with ${property} interpolation against user then system properties) via PluginDependenciesResolver.resolveCoreExtensionAndFlatten(). If resolution fails (PluginResolutionException: unknown artifact, missing version, unreachable repository, offline mode) or coordinate interpolation fails (InterpolatorException), it is wrapped in ExtensionResolutionException whose message reads 'Extension <id> or one of its dependencies could not be resolved: <cause>'. This happens during CLI bootstrap, before the project builds.","triggerScenarios":"A .mvn/extensions.xml entry whose coordinates or version do not exist in any reachable repository; a core extension whose transitive dependencies cannot be downloaded; running with -o/--offline without the artifacts cached; ${expr} in coordinates where the property is undefined in user/system properties (fails interpolation); corporate repository requiring credentials that are missing in settings.xml.","commonSituations":"Enabling a core extension (e.g. a logging or masking extension) whose version was bumped or removed; CI runners without network access or with a narrow mirror <mirrorOf> that excludes the extension's repository; private-registry extensions where the settings.xml distribution-management/server credentials were not applied to the bootstrap repositories; typos in groupId/artifactId.","solutions":["Read the wrapped cause in the message; verify the exact coordinates exist: search Maven Central or your corporate repo for that groupId:artifactId:version.","Remove -o/--offline or pre-seed the local repository so the extension and its dependencies resolve.","Check settings.xml mirrors: a mirror with <mirrorOf>*</mirrorOf> can block the repository the extension lives in — narrow the mirrorOf pattern.","Define any ${property} used in extension coordinates via .mvn/maven.config (-Dkey=value) or -D on the command line, since only user/system properties are consulted for interpolation.","Add the extension's repository under <repositories> of... note bootstrap uses the effective repositories; prefer declaring needed repos in settings.xml profiles that are active by default."],"exampleFix":"<!-- before (.mvn/extensions.xml): version does not exist -->\n<extension>\n  <groupId>org.example.build</groupId>\n  <artifactId>cool-extension</artifactId>\n  <version>2.3.99</version>\n</extension>\n\n<!-- after: real released version, property for reuse -->\n<extension>\n  <groupId>org.example.build</groupId>\n  <artifactId>cool-extension</artifactId>\n  <version>${cool.ext.version}</version>\n</extension>\n<!-- .mvn/maven.config -->\n<!-- -Dcool.ext.version=2.3.0 -->","handlingStrategy":"try-catch","validationCode":"// Embedder: pre-flight check that every extensions.xml entry resolves in the local repo or is fetchable\nfor (CoreExtension ext : readCoreExtensions(Path.of(\".mvn/extensions.xml\"))) {\n    String gav = ext.getGroupId() + ':' + ext.getArtifactId() + ':' + ext.getVersion();\n    if (ext.getVersion().startsWith(\"${\")) {\n        requireUserPropertyDefined(ext.getVersion()); // interpolation needs user/system properties\n    }\n    if (!localRepo.find(gav).isPresent()) {\n        LOGGER.warn(\"Core extension {} not cached; build will fail in offline mode\", gav);\n    }\n}","typeGuard":null,"tryCatchPattern":"try {\n    mavenCli.doMain(args, workingDir, ...);\n} catch (org.apache.maven.cli.internal.ExtensionResolutionException e) {\n    String extId = /* parse 'Extension <id> or one of its dependencies...' */;\n    report(\"Core extension \" + extId + \" unresolvable; cause: \" + e.getCause().getMessage());\n    // actionable: check repo reachability, mirrors, offline flag, coordinates\n}","preventionTips":["Pin extension versions to released versions and verify coordinates exist before committing .mvn/extensions.xml.","Ensure settings.xml mirrors do not swallow the repository hosting your extensions; narrow mirrorOf patterns.","For offline/air-gapped CI, pre-seed the local repository with extension artifacts using dependency:go-offline or a provisioning build.","Define any ${property} used in extension coordinates in .mvn/maven.config so interpolation always succeeds."],"tags":["maven","core-extensions","artifact-resolution","extensions-xml","dependency-resolution","offline"],"backgroundTag":"dependency-resolution-failed","analyzedSha":"e4093d4e120eac99d6bdce5ba67cace2f3085c97","analyzedAt":"2026-08-21T22:58:24.034Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}