1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugin.internal;
20
21 import javax.inject.Inject;
22 import javax.inject.Named;
23 import javax.inject.Singleton;
24
25 import java.util.Set;
26 import java.util.stream.Collectors;
27
28 import org.apache.maven.api.DependencyScope;
29 import org.apache.maven.plugin.PluginValidationManager;
30 import org.eclipse.aether.RepositorySystemSession;
31 import org.eclipse.aether.artifact.Artifact;
32 import org.eclipse.aether.resolution.ArtifactDescriptorResult;
33
34
35
36
37
38
39 @Singleton
40 @Named
41 class MavenScopeDependenciesValidator extends AbstractMavenPluginDependenciesValidator {
42
43 @Inject
44 MavenScopeDependenciesValidator(PluginValidationManager pluginValidationManager) {
45 super(pluginValidationManager);
46 }
47
48 @Override
49 protected void doValidate(
50 RepositorySystemSession session,
51 Artifact pluginArtifact,
52 ArtifactDescriptorResult artifactDescriptorResult) {
53 Set<String> mavenArtifacts = artifactDescriptorResult.getDependencies().stream()
54 .filter(d -> !DependencyScope.PROVIDED.is(d.getScope()) && !DependencyScope.TEST.is(d.getScope()))
55 .map(org.eclipse.aether.graph.Dependency::getArtifact)
56 .filter(a -> "org.apache.maven".equals(a.getGroupId()))
57 .filter(a -> !DefaultPluginValidationManager.EXPECTED_PROVIDED_SCOPE_EXCLUSIONS_GA.contains(
58 a.getGroupId() + ":" + a.getArtifactId()))
59 .filter(a -> a.getVersion().startsWith("3."))
60 .map(a -> a.getGroupId() + ":" + a.getArtifactId() + ":" + a.getVersion())
61 .collect(Collectors.toSet());
62
63 if (!mavenArtifacts.isEmpty()) {
64 pluginValidationManager.reportPluginValidationIssue(
65 PluginValidationManager.IssueLocality.EXTERNAL,
66 session,
67 pluginArtifact,
68 "Plugin should declare Maven artifacts in `provided` scope. If the plugin already declares them in `provided` scope, update the maven-plugin-plugin to latest version. Artifacts found with wrong scope: "
69 + mavenArtifacts);
70 }
71 }
72 }