This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch maven-3.9.x
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/maven-3.9.x by this push:
new 20910f26d [MNG-7786] Fix plugin validation misleading message (#1112)
20910f26d is described below
commit 20910f26dbf8ccc3ae3669dbae504d5a1871502e
Author: Tamas Cservenak <[email protected]>
AuthorDate: Fri May 19 17:46:39 2023 +0200
[MNG-7786] Fix plugin validation misleading message (#1112)
Reword the validation warning and add new check for real plugin
dependencies in wrong scopes (do not rely on build-time derived descriptor, but
on real data instead).
---
https://issues.apache.org/jira/browse/MNG-7786
---
.../AbstractMavenPluginDependenciesValidator.java | 6 ------
.../DefaultPluginDependenciesResolver.java | 19 +++++++++++++++++++
.../internal/Maven2DependenciesValidator.java | 2 +-
.../internal/MavenMixedDependenciesValidator.java | 2 +-
.../internal/MavenPluginDependenciesValidator.java | 14 ++++++++++++++
...avenPluginDescriptorDependenciesValidator.java} | 22 ++++++++++++++++------
6 files changed, 51 insertions(+), 14 deletions(-)
diff --git
a/maven-core/src/main/java/org/apache/maven/plugin/internal/AbstractMavenPluginDependenciesValidator.java
b/maven-core/src/main/java/org/apache/maven/plugin/internal/AbstractMavenPluginDependenciesValidator.java
index 6f75c0d33..b62853488 100644
---
a/maven-core/src/main/java/org/apache/maven/plugin/internal/AbstractMavenPluginDependenciesValidator.java
+++
b/maven-core/src/main/java/org/apache/maven/plugin/internal/AbstractMavenPluginDependenciesValidator.java
@@ -18,9 +18,6 @@
*/
package org.apache.maven.plugin.internal;
-import java.util.Arrays;
-import java.util.List;
-
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.PluginValidationManager;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
@@ -34,9 +31,6 @@ import static java.util.Objects.requireNonNull;
*/
abstract class AbstractMavenPluginDependenciesValidator implements
MavenPluginDependenciesValidator {
- protected final List<String> expectedProvidedScopeExclusions =
Arrays.asList(
- "org.apache.maven:maven-archiver", "org.apache.maven:maven-jxr",
"org.apache.maven:plexus-utils");
-
protected final PluginValidationManager pluginValidationManager;
protected AbstractMavenPluginDependenciesValidator(PluginValidationManager
pluginValidationManager) {
diff --git
a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java
b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java
index 0d1dc4f80..80e3de7c6 100644
---
a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java
+++
b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java
@@ -23,6 +23,8 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
import org.apache.maven.RepositoryUtils;
import org.apache.maven.model.Dependency;
@@ -118,6 +120,23 @@ public class DefaultPluginDependenciesResolver implements
PluginDependenciesReso
"Plugin depends on the deprecated Maven 2.x
compatibility layer, which may not be supported in Maven 4.x");
}
}
+
+ Set<String> mavenArtifacts = result.getDependencies().stream()
+ .filter(d -> !JavaScopes.PROVIDED.equals(d.getScope()))
+ .map(org.eclipse.aether.graph.Dependency::getArtifact)
+ .filter(a -> "org.apache.maven".equals(a.getGroupId()))
+ .filter(a ->
!MavenPluginDependenciesValidator.EXPECTED_PROVIDED_SCOPE_EXCLUSIONS_GA.contains(
+ a.getGroupId() + ":" + a.getArtifactId()))
+ .filter(a -> a.getVersion().startsWith("3."))
+ .map(a -> a.getGroupId() + ":" + a.getArtifactId() +
":" + a.getVersion())
+ .collect(Collectors.toSet());
+
+ if (!mavenArtifacts.isEmpty()) {
+ pluginValidationManager.reportPluginValidationIssue(
+ session,
+ pluginArtifact,
+ "Plugin should declare these Maven artifacts in
`provided` scope: " + mavenArtifacts);
+ }
}
pluginArtifact = result.getArtifact();
diff --git
a/maven-core/src/main/java/org/apache/maven/plugin/internal/Maven2DependenciesValidator.java
b/maven-core/src/main/java/org/apache/maven/plugin/internal/Maven2DependenciesValidator.java
index 7e53bd40d..8c2a5c821 100644
---
a/maven-core/src/main/java/org/apache/maven/plugin/internal/Maven2DependenciesValidator.java
+++
b/maven-core/src/main/java/org/apache/maven/plugin/internal/Maven2DependenciesValidator.java
@@ -48,7 +48,7 @@ class Maven2DependenciesValidator extends
AbstractMavenPluginDependenciesValidat
protected void doValidate(MavenSession mavenSession, MojoDescriptor
mojoDescriptor) {
Set<String> maven2Versions =
mojoDescriptor.getPluginDescriptor().getDependencies().stream()
.filter(d -> "org.apache.maven".equals(d.getGroupId()))
- .filter(d ->
!expectedProvidedScopeExclusions.contains(d.getGroupId() + ":" +
d.getArtifactId()))
+ .filter(d ->
!EXPECTED_PROVIDED_SCOPE_EXCLUSIONS_GA.contains(d.getGroupId() + ":" +
d.getArtifactId()))
.map(ComponentDependency::getVersion)
.filter(v -> v.startsWith("2."))
.collect(Collectors.toSet());
diff --git
a/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenMixedDependenciesValidator.java
b/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenMixedDependenciesValidator.java
index e881fc08b..e300bb53b 100644
---
a/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenMixedDependenciesValidator.java
+++
b/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenMixedDependenciesValidator.java
@@ -48,7 +48,7 @@ class MavenMixedDependenciesValidator extends
AbstractMavenPluginDependenciesVal
protected void doValidate(MavenSession mavenSession, MojoDescriptor
mojoDescriptor) {
Set<String> mavenVersions =
mojoDescriptor.getPluginDescriptor().getDependencies().stream()
.filter(d -> "org.apache.maven".equals(d.getGroupId()))
- .filter(d ->
!expectedProvidedScopeExclusions.contains(d.getGroupId() + ":" +
d.getArtifactId()))
+ .filter(d ->
!EXPECTED_PROVIDED_SCOPE_EXCLUSIONS_GA.contains(d.getGroupId() + ":" +
d.getArtifactId()))
.map(ComponentDependency::getVersion)
.collect(Collectors.toSet());
diff --git
a/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginDependenciesValidator.java
b/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginDependenciesValidator.java
index b990bfe58..4484fa3e7 100644
---
a/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginDependenciesValidator.java
+++
b/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginDependenciesValidator.java
@@ -18,6 +18,10 @@
*/
package org.apache.maven.plugin.internal;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
@@ -27,6 +31,16 @@ import org.apache.maven.plugin.descriptor.MojoDescriptor;
* @since 3.9.2
*/
interface MavenPluginDependenciesValidator {
+
+ /**
+ * The collection of "G:A" combinations that do NOT belong to Maven Core,
hence, should be excluded from
+ * "expected in provided scope" type of checks.
+ *
+ * @since 3.9.3
+ */
+ Collection<String> EXPECTED_PROVIDED_SCOPE_EXCLUSIONS_GA =
Collections.unmodifiableCollection(Arrays.asList(
+ "org.apache.maven:maven-archiver", "org.apache.maven:maven-jxr",
"org.apache.maven:plexus-utils"));
+
/**
* Checks mojo dependency issues.
*/
diff --git
a/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenScopeDependenciesValidator.java
b/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginDescriptorDependenciesValidator.java
similarity index 60%
rename from
maven-core/src/main/java/org/apache/maven/plugin/internal/MavenScopeDependenciesValidator.java
rename to
maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginDescriptorDependenciesValidator.java
index 87aaa8f8e..5ec81d860 100644
---
a/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenScopeDependenciesValidator.java
+++
b/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginDescriptorDependenciesValidator.java
@@ -30,16 +30,26 @@ import org.apache.maven.plugin.PluginValidationManager;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
/**
- * Detects Maven3 artifacts in bad scope in plugins.
+ * Detects presence of unwanted Maven3 artifacts in plugin descriptor,
possibly caused by multitude of reasons, among
+ * them is "wrong scope" dependency declaration as well.
+ * <p>
+ * Historically, this class was named as "MavenScopeDependenciesValidator" due
original intent to check "wrong Maven
+ * Artifact scopes". Since then, it turned out that the values validated (the
plugin descriptor dependencies, that is
+ * produced at plugin build time by maven-plugin-plugin) may be off (for
example due maven-plugin-plugin bug), and
+ * is potentially not inline with "reality" (actual plugin dependencies).
+ * <p>
+ * The original intent related check is moved to
+ * {@link
DefaultPluginDependenciesResolver#resolve(org.apache.maven.model.Plugin,
java.util.List, org.eclipse.aether.RepositorySystemSession)}
+ * method instead.
*
- * @since 3.9.2
+ * @since 3.9.3
*/
@Singleton
@Named
-class MavenScopeDependenciesValidator extends
AbstractMavenPluginDependenciesValidator {
+class MavenPluginDescriptorDependenciesValidator extends
AbstractMavenPluginDependenciesValidator {
@Inject
- MavenScopeDependenciesValidator(PluginValidationManager
pluginValidationManager) {
+ MavenPluginDescriptorDependenciesValidator(PluginValidationManager
pluginValidationManager) {
super(pluginValidationManager);
}
@@ -47,7 +57,7 @@ class MavenScopeDependenciesValidator extends
AbstractMavenPluginDependenciesVal
protected void doValidate(MavenSession mavenSession, MojoDescriptor
mojoDescriptor) {
Set<String> mavenArtifacts =
mojoDescriptor.getPluginDescriptor().getDependencies().stream()
.filter(d -> "org.apache.maven".equals(d.getGroupId()))
- .filter(d ->
!expectedProvidedScopeExclusions.contains(d.getGroupId() + ":" +
d.getArtifactId()))
+ .filter(d ->
!EXPECTED_PROVIDED_SCOPE_EXCLUSIONS_GA.contains(d.getGroupId() + ":" +
d.getArtifactId()))
.filter(d -> d.getVersion().startsWith("3."))
.map(d -> d.getGroupId() + ":" + d.getArtifactId() + ":" +
d.getVersion())
.collect(Collectors.toSet());
@@ -56,7 +66,7 @@ class MavenScopeDependenciesValidator extends
AbstractMavenPluginDependenciesVal
pluginValidationManager.reportPluginValidationIssue(
mavenSession,
mojoDescriptor,
- "Plugin should declare these Maven artifacts in `provided`
scope: " + mavenArtifacts);
+ "Plugin descriptor should not contain these Maven
artifacts: " + mavenArtifacts);
}
}
}