{"record":{"id":"9f465dc29d21a5e8","repo":"apache/maven","slug":"plugin-or-one-of-its-dependencies-could-not-be","errorCode":null,"errorMessage":"Plugin {} or one of its dependencies could not be resolved:\n\t{}","messagePattern":"Plugin (.+?) or one of its dependencies could not be resolved:\n\t(.+?)","errorType":"exception","errorClass":"PluginResolutionException","httpStatus":null,"severity":"error","filePath":"impl/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java","lineNumber":206,"sourceCode":"\n            for (MavenPluginDependenciesValidator dependenciesValidator : dependenciesValidators) {\n                dependenciesValidator.validate(session, pluginArtifact, result);\n            }\n\n            pluginArtifact = result.getArtifact();\n\n            if (logger.isWarnEnabled() && !result.getRelocations().isEmpty()) {\n                String message =\n                        pluginArtifact instanceof RelocatedArtifact relocated ? \": \" + relocated.getMessage() : \"\";\n                logger.warn(\n                        \"The extension {} has been relocated to {}{}\",\n                        result.getRelocations().get(0),\n                        pluginArtifact,\n                        message);\n            }\n            return resolveInternal(plugin, pluginArtifact, dependencyFilter, repositories, session);\n        } catch (ArtifactDescriptorException e) {\n            throw new PluginResolutionException(plugin, e.getResult().getExceptions(), e);\n        }\n    }\n\n    @Deprecated\n    @Override\n    public DependencyResult resolvePlugin(\n            Plugin plugin,\n            Artifact artifact,\n            DependencyFilter dependencyFilter,\n            List<RemoteRepository> repositories,\n            RepositorySystemSession session)\n            throws PluginResolutionException {\n        return resolvePluginAndFlatten(plugin, artifact, dependencyFilter, repositories, session);\n    }\n\n    @Override\n    public DependencyResult resolvePluginAndFlatten(\n            Plugin plugin,","sourceCodeStart":188,"sourceCodeEnd":224,"githubUrl":"https://github.com/apache/maven/blob/e4093d4e120eac99d6bdce5ba67cace2f3085c97/impl/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java#L188-L224","documentation":"Deprecated extension-resolution path in DefaultPluginDependenciesResolver: after reading the descriptor of a core/extension plugin (and warning about relocations), an ArtifactDescriptorException — failure to read the extension's POM — is converted to PluginResolutionException with the combined 'Plugin ... or one of its dependencies could not be resolved' message. Same failure family as the non-deprecated resolver, surfaced when building extension realms.","triggerScenarios":"Resolving a <extensions>true</extensions> plugin (or deprecated resolvePlugin/resolveExtension API) whose POM cannot be read: missing POM, invalid XML, unresolvable parent, or transfer failure from the configured repositories.","commonSituations":"Custom packaging/build extensions whose POM is missing from the corporate repository; extensions whose parent POM lives in a repo not proxied by the mirror; local repo corruption.","solutions":["Check the extension plugin's POM is deployed and readable in a reachable repository.","Fix the coordinates/version to one that is fully deployed (POM plus JAR plus parent chain).","Purge the local cache for that group and re-run with mvn -U.","Ensure mirrors expose the repository hosting the extension's parent POM.","If the extension is yours, run mvn deploy on a clean repo and verify the full file set landed."],"exampleFix":"# before: extension POM unreadable (missing parent) while building the extension realm\n# after: verify deployment completeness, then force refresh\n\ncurl -fsSI https://repo.example.com/org/example/example-build-extension/2.0/example-build-extension-2.0.pom\nrm -rf ~/.m2/repository/org/example/example-build-extension\nmvn -U verify","handlingStrategy":"validation","validationCode":"# validate the extension's full descriptor chain before the build consumes it\nrepo=https://repo.example.com\nfor f in example-build-extension-2.0.pom example-build-extension-2.0.jar; do\n  curl -fsSI $repo/org/example/example-build-extension/2.0/$f > /dev/null || echo \"MISSING: $f\"\ndone\n# parent POM referenced by the extension must also resolve\ncurl -fsSI $repo/org/example/example-parent/1.3/example-parent-1.3.pom > /dev/null || echo 'MISSING parent POM'","typeGuard":null,"tryCatchPattern":"try {\n    pluginDependenciesResolver.resolveExtension(plugin, repositories, session); // deprecated API\n} catch (PluginResolutionException e) {\n    if (e.getCause() instanceof ArtifactDescriptorException ade) {\n        reportDescriptorFailure(plugin, ade.getResult().getExceptions());\n    }\n    throw e;\n}","preventionTips":["Keep extension plugins on released versions with complete deployments.","Avoid hand-editing repository paths for extensions; let the repo manager proxy the source repo.","Purge ~/.m2/repository entries for an extension after fixing upstream, then rebuild with -U.","Track deprecation: migrate off the resolvePlugin/resolveExtension APIs when updating embedder code."],"tags":["maven","plugin","extensions","artifact-descriptor","deprecated-api"],"backgroundTag":"plugin-pom-descriptor-read-failure","analyzedSha":"e4093d4e120eac99d6bdce5ba67cace2f3085c97","analyzedAt":"2026-08-21T22:58:24.034Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}