apache/maven · warning

* {}

Error message

 * {}

What it means

Not an exception but the per-plugin heading line of Maven's end-of-session plugin validation report. DefaultPluginValidationManager is an EventSpy that collects validation issues during the build; at SessionEnded, when 'maven.plugin.validation' is set to summary, brief or verbose, it prints this line naming each affected plugin as ' * groupId:artifactId:version' (sorted case-insensitively). The issues underneath come from checks like MavenPluginValidator (malformed plugin descriptors) and PluginDependencyAnalyzer (wrong dependency scopes, leaked classloader dependencies).

Source

Thrown at impl/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginValidationManager.java:232

                        || validationReportLevel == ValidationReportLevel.VERBOSE
                ? EnumSet.allOf(IssueLocality.class)
                : EnumSet.of(IssueLocality.EXTERNAL);

        if (hasAnythingToReport(issuesMap, issueLocalitiesToReport)) {
            logger.warn("");
            logger.warn("Plugin {} validation issues were detected in following plugin(s)", issueLocalitiesToReport);
            logger.warn("");

            // Sorting the plugins
            List<Map.Entry<String, PluginValidationIssues>> sortedEntries = new ArrayList<>(issuesMap.entrySet());
            sortedEntries.sort(Map.Entry.comparingByKey(String.CASE_INSENSITIVE_ORDER));

            for (Map.Entry<String, PluginValidationIssues> entry : sortedEntries) {
                PluginValidationIssues issues = entry.getValue();
                if (!hasAnythingToReport(issues, issueLocalitiesToReport)) {
                    continue;
                }
                logger.warn(" * {}", entry.getKey());
                if (validationReportLevel == ValidationReportLevel.VERBOSE) {
                    if (!issues.pluginDeclarations.isEmpty()) {
                        logger.warn("  Declared at location(s):");
                        for (String pluginDeclaration : issues.pluginDeclarations) {
                            logger.warn("   * {}", pluginDeclaration);
                        }
                    }
                    if (!issues.pluginIssues.isEmpty()) {
                        for (IssueLocality issueLocality : issueLocalitiesToReport) {
                            Set<String> pluginIssues = issues.pluginIssues.get(issueLocality);
                            if (pluginIssues != null && !pluginIssues.isEmpty()) {
                                logger.warn("  Plugin {} issue(s):", issueLocality);
                                for (String pluginIssue : pluginIssues) {
                                    logger.warn("   * {}", pluginIssue);
                                }
                            }
                        }
                    }

View on GitHub (pinned to e4093d4e12)

Solutions

  1. Note the exact GAV on this line, read the indented issue lines below it, and act on them - in most cases upgrading the named plugin to its latest release clears the issue
  2. Pin that upgrade centrally in the top-level parent's <pluginManagement> so all modules inherit the fixed version
  3. If the plugin is maintained in-house, fix the reported problem (dependency scopes, removed-internal-API usage, descriptor fields) and release
  4. Suppress a known-acceptable plugin with -Dmaven.plugin.validation.excludes=groupId:artifactId:version, or mute the whole report with -Dmaven.plugin.validation=none (avoid in CI)

Example fix

// before (parent pom.xml, stale plugin inherited everywhere)
<build>
  <plugins>
    <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version></plugin>
  </plugins>
</build>
// after
<build>
  <pluginManagement>
    <plugins>
      <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.13.0</version></plugin>
    </plugins>
  </pluginManagement>
</build>
Defensive patterns

Strategy: validation

Validate before calling

# preflight: list plugins with available updates before the build
mvn -q versions:display-plugin-updates -DallowSnapshots=false

Prevention

When it happens

Trigger: Run a build with -Dmaven.plugin.validation=summary|brief|verbose (or that value in settings.xml) in which at least one executed or resolved plugin raised a validation issue, e.g. a mojo using a deprecated API or a plugin depending on maven-core in compile scope. At SessionEnded, hasAnythingToReport() is true and one ' * GAV' line is printed per affected plugin.

Common situations: Maven 3.9+/4.x upgrades where the validation reporting shipped with MNG-7238-style checks suddenly surfaces in CI logs; multi-module builds inheriting stale plugin versions from a corporate parent; third-party plugins that lag behind current Maven API rules.

Related errors


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