apache/maven · warning

Ignoring incompatible plugin version {}: {}

Error message

Ignoring incompatible plugin version {}: {}

What it means

Non-debug form of the incompatible-candidate warning (line 364): only e.getMessage() is printed instead of a stack trace. DefaultPluginVersionResolver.isCompatible caught PluginIncompatibleException from pluginManager.checkPrerequisites for candidate 'version' and returns false so version selection continues with the next-older candidate. The message names the version skipped and the reason (typically the required-vs-current Maven version mismatch).

Source

Thrown at impl/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java:364

        try {
            pluginDescriptor = pluginManager.getPluginDescriptor(
                    plugin, request.getRepositories(), request.getRepositorySession());
        } catch (PluginResolutionException e) {
            logger.debug("Ignoring unresolvable plugin version {}", version, e);
            return false;
        } catch (Exception e) {
            // ignore for now and delay failure to higher level processing
            return true;
        }

        try {
            pluginManager.checkPrerequisites(pluginDescriptor);
        } catch (PluginIncompatibleException e) {
            if (logger.isDebugEnabled()) {
                logger.warn("Ignoring incompatible plugin version {}:", version, e);
            } else {
                logger.warn("Ignoring incompatible plugin version {}: {}", version, e.getMessage());
            }
            return false;
        }

        return true;
    }

    private void mergeMetadata(
            RepositorySystemSession session,
            RequestTrace trace,
            Versions versions,
            org.eclipse.aether.metadata.Metadata metadata,
            ArtifactRepository repository) {
        if (metadata != null && metadata.getFile() != null && metadata.getFile().isFile()) {
            try {
                Map<String, ?> options = Collections.singletonMap(MetadataReader.IS_STRICT, Boolean.FALSE);

                Metadata repoMetadata = metadataReader.read(metadata.getFile(), options);

View on GitHub (pinned to e4093d4e12)

Solutions

  1. If a version was subsequently selected, silence the noise by pinning that selected version explicitly in the POM
  2. If resolution failed after these skips, either pin an older compatible version or upgrade Maven to the prerequisite shown in the message
  3. Run once with -X to see the stack-trace variant with the exact required Maven version

Example fix

# before: resolver probes and skips incompatible candidates every build
mvn org.apache.maven.plugins:maven-clean-plugin:clean
# after: pin compatible version on the CLI to skip the search
mvn org.apache.maven.plugins:maven-clean-plugin:3.3.2:clean
Defensive patterns

Strategy: fallback

Validate before calling

# preflight: find the newest plugin release whose prerequisite your Maven satisfies
mvn -V  # print running Maven version
mvn versions:display-plugin-updates  # compare available lines against it

Prevention

When it happens

Trigger: Default-log-level build invoking an unversioned plugin whose newer releases declare higher Maven prerequisites; each skipped release logs one 'Ignoring incompatible plugin version X: <reason>' line while the resolver descends the version list.

Common situations: CI logs showing several of these lines followed by a successful 'Selected plugin' message (harmless churn); or followed by the fatal resolution error when no candidate is compatible - then these lines are the audit trail of why.

Related errors


AI-assisted analysis of apache/maven@e4093d4e12 (2026-08-21). Data as JSON: /api/errors/30c91994d81334e5. Report an issue: GitHub.