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