apache/maven · warning
* {}
Error message
* {} What it means
A single entry under 'Declared at location(s):' in the VERBOSE plugin validation report: the physical source location (e.g. /path/to/pom.xml, line 42) of one declaration of the plugin that has validation issues. One line is printed per declaration, so the same plugin can list multiple locations across the reactor.
Source
Thrown at impl/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginValidationManager.java:237
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);
}
}
}
}
if (!issues.mojoIssues.isEmpty()) {
for (IssueLocality issueLocality : issueLocalitiesToReport) {
Map<String, LinkedHashSet<String>> mojoIssues = issues.mojoIssues.get(issueLocality);
if (mojoIssues != null && !mojoIssues.isEmpty()) {
logger.warn(" Mojo {} issue(s):", issueLocality);View on GitHub (pinned to e4093d4e12)
Solutions
- Edit each listed location and align the plugin declaration (usually pin one version in pluginManagement)
- Remove redundant declarations so only the parent-managed one remains
- Re-run the build with the same verbose setting to confirm the plugin no longer appears in the report
Defensive patterns
Strategy: validation
Validate before calling
# verify how many places declare a plugin (should converge to one managed entry) grep -rn --include=pom.xml '<artifactId>THE-PLUGIN</artifactId>' .
Prevention
- Keep one canonical declaration point per plugin; treat multiple declarations as review findings
- Remove plugin declarations from profiles unless the profile is actually activated
When it happens
Trigger: -Dmaven.plugin.validation=verbose build where the flagged plugin was invoked from one or more POM declarations; each declaration's InputLocation string is printed as ' * <location>'.
Common situations: Same plugin declared with different versions in different modules; plugin re-declared in profile blocks; teams hunting down which of dozens of POMs pulls in the flagged version.
Related errors
AI-assisted analysis of apache/maven@e4093d4e12 (2026-08-21).
Data as JSON: /api/errors/99063d3355b772bd.
Report an issue: GitHub.