3030import java .util .HashMap ;
3131import java .util .LinkedHashMap ;
3232import java .util .LinkedHashSet ;
33+ import java .util .List ;
3334import java .util .Locale ;
3435import java .util .Map ;
3536import java .util .Set ;
3637import java .util .concurrent .ConcurrentHashMap ;
38+ import java .util .stream .Collectors ;
3739
3840import org .apache .maven .eventspy .AbstractEventSpy ;
3941import org .apache .maven .execution .ExecutionEvent ;
@@ -61,8 +63,12 @@ public final class DefaultPluginValidationManager extends AbstractEventSpy imple
6163
6264 private static final String ISSUES_KEY = DefaultPluginValidationManager .class .getName () + ".issues" ;
6365
66+ private static final String PLUGIN_EXCLUDES_KEY = DefaultPluginValidationManager .class .getName () + ".excludes" ;
67+
6468 private static final String MAVEN_PLUGIN_VALIDATION_KEY = "maven.plugin.validation" ;
6569
70+ private static final String MAVEN_PLUGIN_VALIDATION_EXCLUDES_KEY = "maven.plugin.validation.excludes" ;
71+
6672 private static final ValidationReportLevel DEFAULT_VALIDATION_LEVEL = ValidationReportLevel .INLINE ;
6773
6874 private static final Collection <ValidationReportLevel > INLINE_VALIDATION_LEVEL = Collections .unmodifiableCollection (
@@ -87,12 +93,28 @@ public void onEvent(Object event) {
8793 RepositorySystemSession repositorySystemSession =
8894 executionEvent .getSession ().getRepositorySession ();
8995 validationReportLevel (repositorySystemSession ); // this will parse and store it in session.data
96+ validationPluginExcludes (repositorySystemSession );
9097 } else if (executionEvent .getType () == ExecutionEvent .Type .SessionEnded ) {
9198 reportSessionCollectedValidationIssues (executionEvent .getSession ());
9299 }
93100 }
94101 }
95102
103+ private List <?> validationPluginExcludes (RepositorySystemSession session ) {
104+ return (List <?>) session .getData ().computeIfAbsent (PLUGIN_EXCLUDES_KEY , () -> parsePluginExcludes (session ));
105+ }
106+
107+ private List <String > parsePluginExcludes (RepositorySystemSession session ) {
108+ String excludes = ConfigUtils .getString (session , null , MAVEN_PLUGIN_VALIDATION_EXCLUDES_KEY );
109+ if (excludes == null || excludes .isEmpty ()) {
110+ return Collections .emptyList ();
111+ }
112+ return Arrays .stream (excludes .split ("," ))
113+ .map (String ::trim )
114+ .filter (s -> !s .isEmpty ())
115+ .collect (Collectors .toList ());
116+ }
117+
96118 private ValidationReportLevel validationReportLevel (RepositorySystemSession session ) {
97119 return (ValidationReportLevel ) session .getData ()
98120 .computeIfAbsent (ValidationReportLevel .class , () -> parseValidationReportLevel (session ));
@@ -141,6 +163,9 @@ private void mayReportInline(RepositorySystemSession session, IssueLocality loca
141163 public void reportPluginValidationIssue (
142164 IssueLocality locality , RepositorySystemSession session , Artifact pluginArtifact , String issue ) {
143165 String pluginKey = pluginKey (pluginArtifact );
166+ if (validationPluginExcludes (session ).contains (pluginKey )) {
167+ return ;
168+ }
144169 PluginValidationIssues pluginIssues =
145170 pluginIssues (session ).computeIfAbsent (pluginKey , k -> new PluginValidationIssues ());
146171 pluginIssues .reportPluginIssue (locality , null , issue );
@@ -151,6 +176,9 @@ public void reportPluginValidationIssue(
151176 public void reportPluginValidationIssue (
152177 IssueLocality locality , MavenSession mavenSession , MojoDescriptor mojoDescriptor , String issue ) {
153178 String pluginKey = pluginKey (mojoDescriptor );
179+ if (validationPluginExcludes (mavenSession .getRepositorySession ()).contains (pluginKey )) {
180+ return ;
181+ }
154182 PluginValidationIssues pluginIssues = pluginIssues (mavenSession .getRepositorySession ())
155183 .computeIfAbsent (pluginKey , k -> new PluginValidationIssues ());
156184 pluginIssues .reportPluginIssue (locality , pluginDeclaration (mavenSession , mojoDescriptor ), issue );
@@ -165,6 +193,9 @@ public void reportPluginMojoValidationIssue(
165193 Class <?> mojoClass ,
166194 String issue ) {
167195 String pluginKey = pluginKey (mojoDescriptor );
196+ if (validationPluginExcludes (mavenSession .getRepositorySession ()).contains (pluginKey )) {
197+ return ;
198+ }
168199 PluginValidationIssues pluginIssues = pluginIssues (mavenSession .getRepositorySession ())
169200 .computeIfAbsent (pluginKey , k -> new PluginValidationIssues ());
170201 pluginIssues .reportPluginMojoIssue (
0 commit comments