diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegateTestSupport.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegateTestSupport.java index 5959a5013..aa2ba64b9 100644 --- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegateTestSupport.java +++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegateTestSupport.java @@ -19,15 +19,7 @@ package org.eclipse.aether.internal.impl.collect; import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.atomic.AtomicReference; import org.eclipse.aether.DefaultRepositorySystemSession; @@ -387,7 +379,7 @@ void testManagedVersionScope() throws DependencyCollectionException { Dependency dependency = newDep("managed:aid:ext:ver"); CollectRequest request = new CollectRequest(dependency, singletonList(repository)); - session.setDependencyManager(new ClassicDependencyManager()); + session.setDependencyManager(new ClassicDependencyManager(s -> Objects.equals(s, "system"))); CollectResult result = collector.collectDependencies(session, request); @@ -462,7 +454,7 @@ void testDependencyManagement_VerboseMode() throws Exception { void testDependencyManagement_TransitiveDependencyManager() throws DependencyCollectionException, IOException { collector = setupCollector(newReader("managed/")); parser = new DependencyGraphParser("artifact-descriptions/managed/"); - session.setDependencyManager(new TransitiveDependencyManager()); + session.setDependencyManager(new TransitiveDependencyManager(s -> Objects.equals(s, "system"))); final Dependency root = newDep("gid:root:ext:ver", "compile"); CollectRequest request = new CollectRequest(root, singletonList(repository)); request.addManagedDependency(newDep("gid:root:ext:must-retain-core-management")); @@ -479,7 +471,7 @@ void testDependencyManagement_TransitiveDependencyManager() throws DependencyCol rootArtifactRequest.addManagedDependency(newDep("gid:root:ext:must-retain-core-management")); rootArtifactRequest.addManagedDependency(newDep("gid:direct:ext:must-retain-core-management")); rootArtifactRequest.addManagedDependency(newDep("gid:transitive-1:ext:managed-by-root")); - session.setDependencyManager(new TransitiveDependencyManager()); + session.setDependencyManager(new TransitiveDependencyManager(s -> Objects.equals(s, "system"))); result = collector.collectDependencies(session, rootArtifactRequest); assertEqualSubtree(expectedTree, toDependencyResult(result.getRoot(), "compile", null)); } @@ -488,7 +480,7 @@ void testDependencyManagement_TransitiveDependencyManager() throws DependencyCol void testDependencyManagement_DefaultDependencyManager() throws DependencyCollectionException, IOException { collector = setupCollector(newReader("managed/")); parser = new DependencyGraphParser("artifact-descriptions/managed/"); - session.setDependencyManager(new DefaultDependencyManager()); + session.setDependencyManager(new DefaultDependencyManager(s -> Objects.equals(s, "system"))); final Dependency root = newDep("gid:root:ext:ver", "compile"); CollectRequest request = new CollectRequest(root, singletonList(repository)); request.addManagedDependency(newDep("gid:root:ext:must-not-manage-root")); @@ -506,7 +498,7 @@ void testDependencyManagement_DefaultDependencyManager() throws DependencyCollec rootArtifactRequest.addManagedDependency(newDep("gid:root:ext:must-not-manage-root")); rootArtifactRequest.addManagedDependency(newDep("gid:direct:ext:managed-by-dominant-request")); rootArtifactRequest.addManagedDependency(newDep("gid:transitive-1:ext:managed-by-root")); - session.setDependencyManager(new DefaultDependencyManager()); + session.setDependencyManager(new DefaultDependencyManager(s -> Objects.equals(s, "system"))); result = collector.collectDependencies(session, rootArtifactRequest); assertEqualSubtree(expectedTree, toDependencyResult(result.getRoot(), "compile", null)); } diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfWithSkipperDependencyCollectorTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfWithSkipperDependencyCollectorTest.java index ff4c894cb..a3e5c225b 100644 --- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfWithSkipperDependencyCollectorTest.java +++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfWithSkipperDependencyCollectorTest.java @@ -18,10 +18,7 @@ */ package org.eclipse.aether.internal.impl.collect.bf; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; +import java.util.*; import org.eclipse.aether.artifact.DefaultArtifact; import org.eclipse.aether.collection.CollectRequest; @@ -72,7 +69,7 @@ private Dependency newDep(String coords, String scope, Collection exc void testSkipperWithDifferentExclusion() throws DependencyCollectionException { collector = setupCollector(newReader("managed/")); parser = new DependencyGraphParser("artifact-descriptions/managed/"); - session.setDependencyManager(new TransitiveDependencyManager()); + session.setDependencyManager(new TransitiveDependencyManager(s -> Objects.equals(s, "system"))); ExclusionDependencySelector exclSel1 = new ExclusionDependencySelector(); session.setDependencySelector(exclSel1); diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/artifact/DependencyScopes.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/artifact/DependencyScopes.java index ef2c4df2f..d53257bd7 100644 --- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/artifact/DependencyScopes.java +++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/artifact/DependencyScopes.java @@ -28,7 +28,9 @@ * * @see org.eclipse.aether.graph.Dependency#getScope() * @since 2.0.0 + * @deprecated Consumer project is defining scopes. */ +@Deprecated public final class DependencyScopes { /** diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/AbstractDependencyManager.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/AbstractDependencyManager.java index ad80679ac..0d9430cb8 100644 --- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/AbstractDependencyManager.java +++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/AbstractDependencyManager.java @@ -18,12 +18,8 @@ */ package org.eclipse.aether.util.graph.manager; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.Objects; +import java.util.*; +import java.util.function.Predicate; import org.eclipse.aether.artifact.Artifact; import org.eclipse.aether.artifact.ArtifactProperties; @@ -32,7 +28,6 @@ import org.eclipse.aether.collection.DependencyManager; import org.eclipse.aether.graph.Dependency; import org.eclipse.aether.graph.Exclusion; -import org.eclipse.aether.util.artifact.DependencyScopes; import static java.util.Objects.requireNonNull; @@ -59,12 +54,11 @@ public abstract class AbstractDependencyManager implements DependencyManager { protected final Map> managedExclusions; + protected final Predicate systemScopePredicate; + private final int hashCode; - /** - * Creates a new dependency manager without any management information. - */ - protected AbstractDependencyManager(int deriveUntil, int applyFrom) { + protected AbstractDependencyManager(int deriveUntil, int applyFrom, Predicate systemScopePredicate) { this( 0, deriveUntil, @@ -73,7 +67,8 @@ protected AbstractDependencyManager(int deriveUntil, int applyFrom) { Collections.emptyMap(), Collections.emptyMap(), Collections.emptyMap(), - Collections.emptyMap()); + Collections.emptyMap(), + systemScopePredicate); } @SuppressWarnings("checkstyle:ParameterNumber") @@ -85,15 +80,17 @@ protected AbstractDependencyManager( Map managedScopes, Map managedOptionals, Map managedLocalPaths, - Map> managedExclusions) { + Map> managedExclusions, + Predicate systemScopePredicate) { this.depth = depth; this.deriveUntil = deriveUntil; this.applyFrom = applyFrom; - this.managedVersions = managedVersions; - this.managedScopes = managedScopes; - this.managedOptionals = managedOptionals; - this.managedLocalPaths = managedLocalPaths; - this.managedExclusions = managedExclusions; + this.managedVersions = requireNonNull(managedVersions); + this.managedScopes = requireNonNull(managedScopes); + this.managedOptionals = requireNonNull(managedOptionals); + this.managedLocalPaths = requireNonNull(managedLocalPaths); + this.managedExclusions = requireNonNull(managedExclusions); + this.systemScopePredicate = requireNonNull(systemScopePredicate); this.hashCode = Objects.hash( depth, @@ -195,7 +192,7 @@ public DependencyManagement manageDependency(Dependency dependency) { } management.setScope(scope); - if (!DependencyScopes.SYSTEM.equals(scope) + if (!systemScopePredicate.test(scope) && dependency.getArtifact().getProperty(ArtifactProperties.LOCAL_PATH, null) != null) { Map properties = new HashMap<>(dependency.getArtifact().getProperties()); @@ -204,8 +201,8 @@ public DependencyManagement manageDependency(Dependency dependency) { } } - if ((DependencyScopes.SYSTEM.equals(scope)) - || (scope == null && DependencyScopes.SYSTEM.equals(dependency.getScope()))) { + if ((systemScopePredicate.test(scope)) + || (scope == null && systemScopePredicate.test(dependency.getScope()))) { String localPath = managedLocalPaths.get(key); if (localPath != null) { if (management == null) { diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/ClassicDependencyManager.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/ClassicDependencyManager.java index d850fe80b..921b65c1e 100644 --- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/ClassicDependencyManager.java +++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/ClassicDependencyManager.java @@ -20,6 +20,8 @@ import java.util.Collection; import java.util.Map; +import java.util.Objects; +import java.util.function.Predicate; import org.eclipse.aether.collection.DependencyCollectionContext; import org.eclipse.aether.collection.DependencyManager; @@ -33,9 +35,16 @@ public final class ClassicDependencyManager extends AbstractDependencyManager { /** * Creates a new dependency manager without any management information. + * + * @deprecated Use constructor that provides consumer application specific predicate. */ + @Deprecated public ClassicDependencyManager() { - this(false); + this(s -> Objects.equals(s, "system")); + } + + public ClassicDependencyManager(Predicate systemScopePredicate) { + this(false, systemScopePredicate); } /** @@ -47,8 +56,8 @@ public ClassicDependencyManager() { * * @since 2.0.0 */ - public ClassicDependencyManager(boolean transitive) { - super(transitive ? Integer.MAX_VALUE : 2, 2); + public ClassicDependencyManager(boolean transitive, Predicate systemScopePredicate) { + super(transitive ? Integer.MAX_VALUE : 2, 2, systemScopePredicate); } @SuppressWarnings("checkstyle:ParameterNumber") @@ -60,7 +69,8 @@ private ClassicDependencyManager( Map managedScopes, Map managedOptionals, Map managedLocalPaths, - Map> managedExclusions) { + Map> managedExclusions, + Predicate systemScopePredicate) { super( depth, deriveUntil, @@ -69,7 +79,8 @@ private ClassicDependencyManager( managedScopes, managedOptionals, managedLocalPaths, - managedExclusions); + managedExclusions, + systemScopePredicate); } @Override @@ -98,6 +109,7 @@ protected DependencyManager newInstance( managedScopes, managedOptionals, managedLocalPaths, - managedExclusions); + managedExclusions, + systemScopePredicate); } } diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/DefaultDependencyManager.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/DefaultDependencyManager.java index f76b2a44a..069951d63 100644 --- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/DefaultDependencyManager.java +++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/DefaultDependencyManager.java @@ -20,6 +20,8 @@ import java.util.Collection; import java.util.Map; +import java.util.Objects; +import java.util.function.Predicate; import org.eclipse.aether.collection.DependencyManager; import org.eclipse.aether.graph.Exclusion; @@ -39,9 +41,16 @@ public final class DefaultDependencyManager extends AbstractDependencyManager { /** * Creates a new dependency manager without any management information. + * + * @deprecated Use constructor that provides consumer application specific predicate. */ + @Deprecated public DefaultDependencyManager() { - super(Integer.MAX_VALUE, 0); + this(s -> Objects.equals(s, "system")); + } + + public DefaultDependencyManager(Predicate systemScopePredicate) { + super(Integer.MAX_VALUE, 0, systemScopePredicate); } @SuppressWarnings("checkstyle:ParameterNumber") @@ -53,7 +62,8 @@ private DefaultDependencyManager( Map managedScopes, Map managedOptionals, Map managedLocalPaths, - Map> managedExclusions) { + Map> managedExclusions, + Predicate systemScopePredicate) { super( depth, deriveUntil, @@ -62,7 +72,8 @@ private DefaultDependencyManager( managedScopes, managedOptionals, managedLocalPaths, - managedExclusions); + managedExclusions, + systemScopePredicate); } @Override @@ -80,6 +91,7 @@ protected DependencyManager newInstance( managedScopes, managedOptionals, managedLocalPaths, - managedExclusions); + managedExclusions, + systemScopePredicate); } } diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/TransitiveDependencyManager.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/TransitiveDependencyManager.java index e1ec33048..7a99e8ad1 100644 --- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/TransitiveDependencyManager.java +++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/TransitiveDependencyManager.java @@ -20,6 +20,8 @@ import java.util.Collection; import java.util.Map; +import java.util.Objects; +import java.util.function.Predicate; import org.eclipse.aether.collection.DependencyManager; import org.eclipse.aether.graph.Exclusion; @@ -36,9 +38,16 @@ public final class TransitiveDependencyManager extends AbstractDependencyManager { /** * Creates a new dependency manager without any management information. + * + * @deprecated Use constructor that provides consumer application specific predicate. */ + @Deprecated public TransitiveDependencyManager() { - super(Integer.MAX_VALUE, 2); + this(s -> Objects.equals(s, "system")); + } + + public TransitiveDependencyManager(Predicate systemScopePredicate) { + super(Integer.MAX_VALUE, 2, systemScopePredicate); } @SuppressWarnings("checkstyle:ParameterNumber") @@ -50,7 +59,8 @@ private TransitiveDependencyManager( Map managedScopes, Map managedOptionals, Map managedLocalPaths, - Map> managedExclusions) { + Map> managedExclusions, + Predicate systemScopePredicate) { super( depth, deriveUntil, @@ -59,7 +69,8 @@ private TransitiveDependencyManager( managedScopes, managedOptionals, managedLocalPaths, - managedExclusions); + managedExclusions, + systemScopePredicate); } @Override @@ -77,6 +88,7 @@ protected DependencyManager newInstance( managedScopes, managedOptionals, managedLocalPaths, - managedExclusions); + managedExclusions, + systemScopePredicate); } } diff --git a/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/manager/DependencyManagerTest.java b/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/manager/DependencyManagerTest.java index b715a7d08..e07d613b1 100644 --- a/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/manager/DependencyManagerTest.java +++ b/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/manager/DependencyManagerTest.java @@ -20,6 +20,8 @@ import java.util.Arrays; import java.util.Collections; +import java.util.Objects; +import java.util.function.Predicate; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.artifact.Artifact; @@ -40,6 +42,8 @@ */ public class DependencyManagerTest { + private final Predicate systemScopePredicate = s -> Objects.equals(s, "system"); + private final Artifact A1 = new DefaultArtifact("test", "a", "", "1"); private final Artifact A2 = new DefaultArtifact("test", "a", "", "2"); @@ -73,7 +77,7 @@ void setUp() { @Test void testClassic() { - DependencyManager manager = new ClassicDependencyManager(); + DependencyManager manager = new ClassicDependencyManager(systemScopePredicate); DependencyManagement mngt; // depth=1: only exclusion applied, nothing more @@ -132,7 +136,7 @@ void testClassic() { @Test void testClassicTransitive() { - DependencyManager manager = new ClassicDependencyManager(true); + DependencyManager manager = new ClassicDependencyManager(true, systemScopePredicate); DependencyManagement mngt; // depth=1: only exclusion applied, nothing more @@ -192,7 +196,7 @@ void testClassicTransitive() { @Test void testTransitive() { - DependencyManager manager = new TransitiveDependencyManager(); + DependencyManager manager = new TransitiveDependencyManager(systemScopePredicate); DependencyManagement mngt; // depth=1: only exclusion applied, nothing more @@ -252,7 +256,7 @@ void testTransitive() { @Test void testDefault() { - DependencyManager manager = new DefaultDependencyManager(); + DependencyManager manager = new DefaultDependencyManager(systemScopePredicate); DependencyManagement mngt; // depth=1: all applied