diff --git a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/DependencyConvergence.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/DependencyConvergence.java index eb583c7b..813bffdb 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/DependencyConvergence.java +++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/DependencyConvergence.java @@ -22,6 +22,7 @@ import javax.inject.Named; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -35,8 +36,10 @@ import org.eclipse.aether.graph.DependencyNode; import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector; -import static org.apache.maven.artifact.Artifact.SCOPE_PROVIDED; -import static org.apache.maven.artifact.Artifact.SCOPE_TEST; +import static org.apache.maven.artifact.Artifact.SCOPE_COMPILE; +import static org.apache.maven.artifact.Artifact.SCOPE_IMPORT; +import static org.apache.maven.artifact.Artifact.SCOPE_RUNTIME; +import static org.apache.maven.artifact.Artifact.SCOPE_SYSTEM; /** * @author Rex Hoffman @@ -50,6 +53,8 @@ public final class DependencyConvergence extends AbstractStandardEnforcerRule { private List excludes; + private List scopes = Arrays.asList(SCOPE_COMPILE, SCOPE_RUNTIME, SCOPE_IMPORT, SCOPE_SYSTEM); + private DependencyVersionMap dependencyVersionMap; private final ResolveUtil resolveUtil; @@ -71,8 +76,7 @@ public boolean selectDependency(Dependency dependency) { return !dependency.isOptional() // regular scope selectors only discard transitive dependencies // and always allow direct dependencies - && !dependency.getScope().equals(SCOPE_TEST) - && !dependency.getScope().equals(SCOPE_PROVIDED); + && scopes.contains(dependency.getScope()); } @Override @@ -142,7 +146,7 @@ private String buildConvergenceErrorMsg(List nodeList) { @Override public String toString() { return String.format( - "DependencyConvergence[includes=%s, excludes=%s, uniqueVersions=%b]", - includes, excludes, uniqueVersions); + "DependencyConvergence[includes=%s, excludes=%s, uniqueVersions=%b, scopes=%s]", + includes, excludes, uniqueVersions, String.join(",", scopes)); } } diff --git a/enforcer-rules/src/site/apt/dependencyConvergence.apt.vm b/enforcer-rules/src/site/apt/dependencyConvergence.apt.vm index ca9d0446..b86adc02 100644 --- a/enforcer-rules/src/site/apt/dependencyConvergence.apt.vm +++ b/enforcer-rules/src/site/apt/dependencyConvergence.apt.vm @@ -139,6 +139,9 @@ and * <> - A list of artifacts for which dependency convergence should not be enforced. These are exceptions to the includes. + * <> - A list of scopes of artifacts for which dependency convergence should be enforced. Not specifying + any scopes is interpreted as having the following scopes activated: compile, runtime, import, system. + [] The format for artifacts is groupId[:artifactId][:version][:type][:scope][:classifier] where artifactId, version, @@ -147,6 +150,10 @@ and +--------------------------------------------- + + compile + runtime + org.slf4j org.apache.commons