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
- 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
- Pin that upgrade centrally in the top-level parent's <pluginManagement> so all modules inherit the fixed version
- If the plugin is maintained in-house, fix the reported problem (dependency scopes, removed-internal-API usage, descriptor fields) and release
- 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
- Pin every plugin version in the top-level parent's <pluginManagement> so no module resolves stale plugins
- Run versions:display-plugin-updates periodically in CI and upgrade flagged plugins
- Keep -Dmaven.plugin.validation=summary (or verbose) enabled in CI so regressions surface at build end
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.