This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
The following commit(s) were added to refs/heads/master by this push:
new 0ba854d8d Feat: Expose scope related bits via scope manager (#1862)
0ba854d8d is described below
commit 0ba854d8d98fec87105116ff9b90ce1157d7ed39
Author: Tamas Cservenak <[email protected]>
AuthorDate: Mon May 11 23:07:52 2026 +0200
Feat: Expose scope related bits via scope manager (#1862)
When Resolver 2.x is used with ScopeManager, the scope semantics cannot be
taken for granted as it was in Maven 3.9 and before, as in this case
scope manager configuration is the one who defines them, and their semantics
as well.
Hence, any scope related operation, like filtering and selecting (during
collection)
must be done in with scope manager prepared filter or selector.
---
.../org/eclipse/aether/scope/ScopeManager.java | 24 ++++++++++++++++++++++
.../aether/impl/scope/InternalScopeManager.java | 7 -------
.../internal/impl/scope/ScopeManagerImpl.java | 6 ++++++
.../aether/util/filter/DependencyFilterUtils.java | 1 +
.../aether/util/filter/ScopeDependencyFilter.java | 1 +
.../graph/selector/ScopeDependencySelector.java | 1 +
6 files changed, 33 insertions(+), 7 deletions(-)
diff --git
a/maven-resolver-api/src/main/java/org/eclipse/aether/scope/ScopeManager.java
b/maven-resolver-api/src/main/java/org/eclipse/aether/scope/ScopeManager.java
index a0bc620d4..4fb89ecfb 100644
---
a/maven-resolver-api/src/main/java/org/eclipse/aether/scope/ScopeManager.java
+++
b/maven-resolver-api/src/main/java/org/eclipse/aether/scope/ScopeManager.java
@@ -21,6 +21,10 @@ package org.eclipse.aether.scope;
import java.util.Collection;
import java.util.Optional;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.graph.DependencyFilter;
+
/**
* Scope manager.
*
@@ -67,4 +71,24 @@ public interface ScopeManager {
* Returns the "universe" (all) of resolution scopes as immutable
collection.
*/
Collection<ResolutionScope> getResolutionScopeUniverse();
+
+ /**
+ * Resolver scope configuration specific: dependency selector to be used
to support this scope (with its dependency
+ * and resolution scopes).
+ * <p>
+ * Important: Resolver 2.x when used with {@link ScopeManager}, the scope
semantics is defined by client code.
+ * Hence, the scopes cannot be interpreted with fixed logic as it was the
case in Maven 3.9 and before, instead
+ * the {@link ScopeManager} has to be asked to create selector based on
scope configuration.
+ */
+ DependencySelector getDependencySelector(RepositorySystemSession session,
ResolutionScope resolutionScope);
+
+ /**
+ * Resolver scope configuration specific: dependency filter to be used to
support this scope (with its dependency
+ * and resolution scopes).
+ * <p>
+ * Important: Resolver 2.x when used with {@link ScopeManager}, the scope
semantics is defined by client code.
+ * Hence, the scopes cannot be interpreted with fixed logic as it was the
case in Maven 3.9 and before, instead
+ * the {@link ScopeManager} has to be asked to create filter based on
scope configuration.
+ */
+ DependencyFilter getDependencyFilter(RepositorySystemSession session,
ResolutionScope resolutionScope);
}
diff --git
a/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/scope/InternalScopeManager.java
b/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/scope/InternalScopeManager.java
index 2482490a0..81c002202 100644
---
a/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/scope/InternalScopeManager.java
+++
b/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/scope/InternalScopeManager.java
@@ -23,7 +23,6 @@ import java.util.Optional;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.collection.CollectResult;
-import org.eclipse.aether.collection.DependencySelector;
import org.eclipse.aether.scope.DependencyScope;
import org.eclipse.aether.scope.ResolutionScope;
import org.eclipse.aether.scope.ScopeManager;
@@ -53,12 +52,6 @@ public interface InternalScopeManager extends ScopeManager {
*/
Optional<BuildScope>
getDependencyScopeMainProjectBuildScope(DependencyScope dependencyScope);
- /**
- * Resolver specific: dependency selector to be used to support this scope
(with its dependency
- * and resolution scopes).
- */
- DependencySelector getDependencySelector(RepositorySystemSession session,
ResolutionScope resolutionScope);
-
/**
* Resolver specific: post-processing to be used to support this scope
(with its dependency
* and resolution scopes).
diff --git
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/scope/ScopeManagerImpl.java
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/scope/ScopeManagerImpl.java
index e507cef36..dd3585577 100644
---
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/scope/ScopeManagerImpl.java
+++
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/scope/ScopeManagerImpl.java
@@ -34,6 +34,7 @@ import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.collection.CollectResult;
import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.graph.DependencyFilter;
import org.eclipse.aether.impl.scope.BuildPath;
import org.eclipse.aether.impl.scope.BuildScope;
import org.eclipse.aether.impl.scope.BuildScopeQuery;
@@ -162,6 +163,11 @@ public final class ScopeManagerImpl implements
InternalScopeManager {
}
}
+ @Override
+ public DependencyFilter getDependencyFilter(RepositorySystemSession
session, ResolutionScope resolutionScope) {
+ return new ScopeDependencyFilter(null,
getDirectlyExcludedLabels(translate(resolutionScope)));
+ }
+
@Override
public CollectResult postProcess(
RepositorySystemSession session, ResolutionScope resolutionScope,
CollectResult collectResult) {
diff --git
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/DependencyFilterUtils.java
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/DependencyFilterUtils.java
index b41191483..433b6202a 100644
---
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/DependencyFilterUtils.java
+++
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/DependencyFilterUtils.java
@@ -115,6 +115,7 @@ public final class DependencyFilterUtils {
* @deprecated resolver is oblivious about "scopes", it is consumer
project which needs to lay these down and
* also assign proper semantics. Moreover, Resolver is oblivious about
notions of "classpath", "modulepath", and
* any other similar uses. These should be handled by consumer project.
+ * @see
org.eclipse.aether.scope.ScopeManager#getDependencyFilter(org.eclipse.aether.RepositorySystemSession,
org.eclipse.aether.scope.ResolutionScope)
*/
@Deprecated
public static DependencyFilter classpathFilter(String... classpathTypes) {
diff --git
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/ScopeDependencyFilter.java
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/ScopeDependencyFilter.java
index 33dbfae7f..3fd5907c3 100644
---
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/ScopeDependencyFilter.java
+++
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/ScopeDependencyFilter.java
@@ -66,6 +66,7 @@ public final class ScopeDependencyFilter implements
DependencyFilter {
}
}
+ @Override
public boolean accept(DependencyNode node, List<DependencyNode> parents) {
Dependency dependency = node.getDependency();
diff --git
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/ScopeDependencySelector.java
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/ScopeDependencySelector.java
index 99c9c14c5..8c796d8d6 100644
---
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/ScopeDependencySelector.java
+++
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/ScopeDependencySelector.java
@@ -38,6 +38,7 @@ import static java.util.Objects.requireNonNull;
*
* @see Dependency#getScope()
* @deprecated this class is deprecated. Use same named class from impl module
instead.
+ * @see
org.eclipse.aether.scope.ScopeManager#getDependencySelector(org.eclipse.aether.RepositorySystemSession,
org.eclipse.aether.scope.ResolutionScope)
*/
@Deprecated
public final class ScopeDependencySelector implements DependencySelector {