diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java
index 57dfb7ebc7..bf384c5595 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java
@@ -89,13 +89,10 @@ public enum DependencyScope {
/**
* Test runtime.
*/
- TEST_RUNTIME("test-runtime", true),
+ TEST_RUNTIME("test-runtime", false),
/**
* System scope.
- *
- * Important: this scope {@code id} MUST BE KEPT in sync with label in
- * {@code org.eclipse.aether.util.artifact.DependencyScopes#SYSTEM}.
*/
SYSTEM("system", false);
diff --git a/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java b/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java
index 47c8c646d7..3db91b59f8 100644
--- a/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java
+++ b/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java
@@ -29,8 +29,10 @@
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
+import org.apache.maven.api.DependencyScope;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
@@ -42,9 +44,8 @@
import org.apache.maven.internal.impl.DefaultLookup;
import org.apache.maven.internal.impl.DefaultSessionFactory;
import org.apache.maven.plugin.LegacySupport;
-import org.apache.maven.repository.internal.scopes.MavenDependencyContextRefiner;
-import org.apache.maven.repository.internal.scopes.MavenScopeDeriver;
-import org.apache.maven.repository.internal.scopes.MavenScopeSelector;
+import org.apache.maven.repository.internal.artifact.FatArtifactTraverser;
+import org.apache.maven.repository.internal.scopes.Maven4ScopeManagerConfiguration;
import org.apache.maven.repository.legacy.repository.ArtifactRepositoryFactory;
import org.apache.maven.rtinfo.RuntimeInformation;
import org.codehaus.plexus.PlexusContainer;
@@ -57,17 +58,20 @@
import org.eclipse.aether.collection.DependencySelector;
import org.eclipse.aether.collection.DependencyTraverser;
import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
+import org.eclipse.aether.internal.impl.scope.ManagedDependencyContextRefiner;
+import org.eclipse.aether.internal.impl.scope.ManagedScopeDeriver;
+import org.eclipse.aether.internal.impl.scope.ManagedScopeSelector;
+import org.eclipse.aether.internal.impl.scope.OptionalDependencySelector;
+import org.eclipse.aether.internal.impl.scope.ScopeDependencySelector;
+import org.eclipse.aether.internal.impl.scope.ScopeManagerImpl;
import org.eclipse.aether.repository.LocalRepository;
import org.eclipse.aether.util.graph.manager.ClassicDependencyManager;
import org.eclipse.aether.util.graph.selector.AndDependencySelector;
import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
-import org.eclipse.aether.util.graph.selector.OptionalDependencySelector;
-import org.eclipse.aether.util.graph.selector.ScopeDependencySelector;
import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
import org.eclipse.aether.util.graph.transformer.ConflictResolver;
import org.eclipse.aether.util.graph.transformer.NearestVersionSelector;
import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
-import org.eclipse.aether.util.graph.traverser.FatArtifactTraverser;
import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy;
import org.junit.jupiter.api.BeforeEach;
@@ -299,24 +303,29 @@ protected void deleteArtifact(Artifact artifact, ArtifactRepository repository)
}
protected DefaultRepositorySystemSession initRepoSession() throws Exception {
- DefaultRepositorySystemSession session = new DefaultRepositorySystemSession();
+ DefaultRepositorySystemSession session = new DefaultRepositorySystemSession(h -> false);
+ session.setScopeManager(new ScopeManagerImpl(Maven4ScopeManagerConfiguration.INSTANCE));
session.setArtifactDescriptorPolicy(new SimpleArtifactDescriptorPolicy(true, true));
DependencyTraverser depTraverser = new FatArtifactTraverser();
session.setDependencyTraverser(depTraverser);
- DependencyManager depManager = new ClassicDependencyManager();
+ DependencyManager depManager = new ClassicDependencyManager(true, session.getScopeManager());
session.setDependencyManager(depManager);
DependencySelector depFilter = new AndDependencySelector(
- new ScopeDependencySelector("test", "provided"),
- new OptionalDependencySelector(),
+ ScopeDependencySelector.legacy(
+ null, Arrays.asList(DependencyScope.TEST.id(), DependencyScope.PROVIDED.id())),
+ OptionalDependencySelector.fromDirect(),
new ExclusionDependencySelector());
session.setDependencySelector(depFilter);
+ ScopeManagerImpl scopeManager = new ScopeManagerImpl(Maven4ScopeManagerConfiguration.INSTANCE);
+ session.setScopeManager(scopeManager);
DependencyGraphTransformer transformer = new ConflictResolver(
- new NearestVersionSelector(), new MavenScopeSelector(),
- new SimpleOptionalitySelector(), new MavenScopeDeriver());
- transformer = new ChainedDependencyGraphTransformer(transformer, new MavenDependencyContextRefiner());
+ new NearestVersionSelector(), new ManagedScopeSelector(scopeManager),
+ new SimpleOptionalitySelector(), new ManagedScopeDeriver(scopeManager));
+ transformer =
+ new ChainedDependencyGraphTransformer(transformer, new ManagedDependencyContextRefiner(scopeManager));
session.setDependencyGraphTransformer(transformer);
LocalRepository localRepo = new LocalRepository(localRepository().getBasedir());
@@ -326,7 +335,7 @@ protected DefaultRepositorySystemSession initRepoSession() throws Exception {
private static final char[] hexCode = "0123456789ABCDEF".toCharArray();
- private static final String printHexBinary(byte[] data) {
+ private static String printHexBinary(byte[] data) {
StringBuilder r = new StringBuilder(data.length * 2);
for (byte b : data) {
r.append(hexCode[(b >> 4) & 0xF]);
diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
index d587541eec..4a437c231f 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
@@ -34,10 +34,8 @@
import java.util.function.Predicate;
import java.util.stream.Collectors;
-import org.apache.maven.RepositoryUtils;
import org.apache.maven.api.services.TypeRegistry;
import org.apache.maven.api.xml.XmlNode;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.apache.maven.eventspy.internal.EventSpyDispatcher;
import org.apache.maven.execution.MavenExecutionRequest;
import org.apache.maven.internal.xml.XmlNodeImpl;
@@ -61,7 +59,6 @@
import org.eclipse.aether.collection.VersionFilter;
import org.eclipse.aether.repository.RepositoryPolicy;
import org.eclipse.aether.resolution.ResolutionErrorPolicy;
-import org.eclipse.aether.util.graph.manager.ClassicDependencyManager;
import org.eclipse.aether.util.graph.version.*;
import org.eclipse.aether.util.listener.ChainedRepositoryListener;
import org.eclipse.aether.util.repository.AuthenticationBuilder;
@@ -169,8 +166,6 @@ class DefaultRepositorySystemSessionFactory implements RepositorySystemSessionFa
private final Logger logger = LoggerFactory.getLogger(getClass());
- private final ArtifactHandlerManager artifactHandlerManager;
-
private final RepositorySystem repoSystem;
private final SettingsDecrypter settingsDecrypter;
@@ -190,7 +185,6 @@ class DefaultRepositorySystemSessionFactory implements RepositorySystemSessionFa
@SuppressWarnings("checkstyle:ParameterNumber")
@Inject
DefaultRepositorySystemSessionFactory(
- ArtifactHandlerManager artifactHandlerManager,
RepositorySystem repoSystem,
SettingsDecrypter settingsDecrypter,
EventSpyDispatcher eventSpyDispatcher,
@@ -199,7 +193,6 @@ class DefaultRepositorySystemSessionFactory implements RepositorySystemSessionFa
VersionScheme versionScheme,
Map requestExtenders,
Map sessionExtenders) {
- this.artifactHandlerManager = artifactHandlerManager;
this.repoSystem = repoSystem;
this.settingsDecrypter = settingsDecrypter;
this.eventSpyDispatcher = eventSpyDispatcher;
@@ -224,8 +217,9 @@ public SessionBuilder newRepositorySessionBuilder(MavenExecutionRequest request)
requestExtender.extend(request);
}
- SessionBuilder sessionBuilder = new MavenSessionBuilderSupplier(repoSystem).get();
- sessionBuilder.setArtifactTypeRegistry(new TypeRegistryAdapter(typeRegistry));
+ MavenSessionBuilderSupplier supplier = new MavenSessionBuilderSupplier(repoSystem);
+ SessionBuilder sessionBuilder = supplier.get();
+ sessionBuilder.setArtifactTypeRegistry(new TypeRegistryAdapter(typeRegistry)); // dynamic
sessionBuilder.setCache(request.getRepositoryCache());
// this map is read ONLY to get config from (profiles + env + system + user)
@@ -262,8 +256,6 @@ public SessionBuilder newRepositorySessionBuilder(MavenExecutionRequest request)
sessionBuilder.setVersionFilter(versionFilter);
}
- sessionBuilder.setArtifactTypeRegistry(RepositoryUtils.newArtifactTypeRegistry(artifactHandlerManager));
-
DefaultSettingsDecryptionRequest decrypt = new DefaultSettingsDecryptionRequest();
decrypt.setProxies(request.getProxies());
decrypt.setServers(request.getServers());
@@ -433,10 +425,11 @@ public SessionBuilder newRepositorySessionBuilder(MavenExecutionRequest request)
}
sessionBuilder.setRepositoryListener(repositoryListener);
+ // may be overridden
String resolverDependencyManagerTransitivity =
mergedProps.getOrDefault(MAVEN_RESOLVER_DEPENDENCY_MANAGER_TRANSITIVITY_KEY, Boolean.TRUE.toString());
- sessionBuilder.setDependencyManager(new ClassicDependencyManager(
- Boolean.parseBoolean(resolverDependencyManagerTransitivity), SystemScopeHandler.LEGACY));
+ sessionBuilder.setDependencyManager(
+ supplier.getDependencyManager(Boolean.parseBoolean(resolverDependencyManagerTransitivity)));
ArrayList paths = new ArrayList<>();
paths.add(Paths.get(request.getLocalRepository().getBasedir()));
@@ -471,7 +464,7 @@ private VersionFilter buildVersionFilter(String filterExpression) {
if (filterExpression != null) {
List expressions = Arrays.stream(filterExpression.split(";"))
.filter(s -> s != null && !s.trim().isEmpty())
- .collect(Collectors.toList());
+ .toList();
for (String expression : expressions) {
if ("h".equals(expression)) {
filters.add(new HighestVersionFilter());
diff --git a/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java b/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java
index de07f9e31a..0f33b38722 100644
--- a/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java
+++ b/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java
@@ -28,7 +28,6 @@
import java.util.Properties;
import org.apache.maven.artifact.InvalidRepositoryException;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.bridge.MavenRepositorySystem;
import org.apache.maven.eventspy.internal.EventSpyDispatcher;
@@ -68,9 +67,6 @@ public class DefaultRepositorySystemSessionFactoryTest {
@Inject
protected org.eclipse.aether.RepositorySystem aetherRepositorySystem;
- @Inject
- protected ArtifactHandlerManager artifactHandlerManager;
-
@Inject
protected RuntimeInformation information;
@@ -83,7 +79,6 @@ public class DefaultRepositorySystemSessionFactoryTest {
@Test
void isNoSnapshotUpdatesTest() throws InvalidRepositoryException {
DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory(
- artifactHandlerManager,
aetherRepositorySystem,
settingsDecrypter,
eventSpyDispatcher,
@@ -108,7 +103,6 @@ void isNoSnapshotUpdatesTest() throws InvalidRepositoryException {
@Test
void isSnapshotUpdatesTest() throws InvalidRepositoryException {
DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory(
- artifactHandlerManager,
aetherRepositorySystem,
settingsDecrypter,
eventSpyDispatcher,
@@ -145,7 +139,6 @@ void wagonProviderConfigurationTest() throws InvalidRepositoryException {
request.setServers(servers);
DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory(
- artifactHandlerManager,
aetherRepositorySystem,
settingsDecrypter,
eventSpyDispatcher,
@@ -190,7 +183,6 @@ void httpConfigurationWithHttpHeadersTest() throws InvalidRepositoryException {
request.setServers(servers);
DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory(
- artifactHandlerManager,
aetherRepositorySystem,
settingsDecrypter,
eventSpyDispatcher,
@@ -229,7 +221,6 @@ void connectTimeoutConfigurationTest() throws InvalidRepositoryException {
request.setServers(servers);
DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory(
- artifactHandlerManager,
aetherRepositorySystem,
settingsDecrypter,
eventSpyDispatcher,
@@ -272,7 +263,6 @@ void connectionTimeoutFromHttpConfigurationTest() throws InvalidRepositoryExcept
request.setServers(servers);
DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory(
- artifactHandlerManager,
aetherRepositorySystem,
settingsDecrypter,
eventSpyDispatcher,
@@ -309,7 +299,6 @@ void requestTimeoutConfigurationTest() throws InvalidRepositoryException {
request.setServers(servers);
DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory(
- artifactHandlerManager,
aetherRepositorySystem,
settingsDecrypter,
eventSpyDispatcher,
@@ -352,7 +341,6 @@ void readTimeoutFromHttpConfigurationTest() throws InvalidRepositoryException {
request.setServers(servers);
DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory(
- artifactHandlerManager,
aetherRepositorySystem,
settingsDecrypter,
eventSpyDispatcher,
@@ -372,7 +360,6 @@ void readTimeoutFromHttpConfigurationTest() throws InvalidRepositoryException {
@Test
void transportConfigurationTest() throws InvalidRepositoryException {
DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory(
- artifactHandlerManager,
aetherRepositorySystem,
settingsDecrypter,
eventSpyDispatcher,
@@ -420,7 +407,6 @@ void transportConfigurationTest() throws InvalidRepositoryException {
@Test
void versionFilteringTest() throws InvalidRepositoryException {
DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory(
- artifactHandlerManager,
aetherRepositorySystem,
settingsDecrypter,
eventSpyDispatcher,
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenSessionBuilderSupplier.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenSessionBuilderSupplier.java
index fd59a2d87f..999f57998e 100644
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenSessionBuilderSupplier.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenSessionBuilderSupplier.java
@@ -18,30 +18,33 @@
*/
package org.apache.maven.repository.internal;
+import java.util.Arrays;
import java.util.function.Supplier;
+import org.apache.maven.api.DependencyScope;
import org.apache.maven.repository.internal.artifact.FatArtifactTraverser;
-import org.apache.maven.repository.internal.scopes.MavenDependencyContextRefiner;
-import org.apache.maven.repository.internal.scopes.MavenScopeDeriver;
-import org.apache.maven.repository.internal.scopes.MavenScopeSelector;
-import org.apache.maven.repository.internal.scopes.MavenSystemScopeHandler;
+import org.apache.maven.repository.internal.scopes.Maven4ScopeManagerConfiguration;
import org.apache.maven.repository.internal.type.DefaultTypeProvider;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession.CloseableSession;
import org.eclipse.aether.RepositorySystemSession.SessionBuilder;
-import org.eclipse.aether.SystemScopeHandler;
import org.eclipse.aether.artifact.ArtifactTypeRegistry;
import org.eclipse.aether.collection.DependencyGraphTransformer;
import org.eclipse.aether.collection.DependencyManager;
import org.eclipse.aether.collection.DependencySelector;
import org.eclipse.aether.collection.DependencyTraverser;
+import org.eclipse.aether.impl.scope.InternalScopeManager;
+import org.eclipse.aether.internal.impl.scope.ManagedDependencyContextRefiner;
+import org.eclipse.aether.internal.impl.scope.ManagedScopeDeriver;
+import org.eclipse.aether.internal.impl.scope.ManagedScopeSelector;
+import org.eclipse.aether.internal.impl.scope.OptionalDependencySelector;
+import org.eclipse.aether.internal.impl.scope.ScopeDependencySelector;
+import org.eclipse.aether.internal.impl.scope.ScopeManagerImpl;
import org.eclipse.aether.resolution.ArtifactDescriptorPolicy;
import org.eclipse.aether.util.artifact.DefaultArtifactTypeRegistry;
import org.eclipse.aether.util.graph.manager.ClassicDependencyManager;
import org.eclipse.aether.util.graph.selector.AndDependencySelector;
import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
-import org.eclipse.aether.util.graph.selector.OptionalDependencySelector;
-import org.eclipse.aether.util.graph.selector.ScopeDependencySelector;
import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
import org.eclipse.aether.util.graph.transformer.ConflictResolver;
import org.eclipse.aether.util.graph.transformer.NearestVersionSelector;
@@ -61,9 +64,11 @@
*/
public class MavenSessionBuilderSupplier implements Supplier {
protected final RepositorySystem repositorySystem;
+ protected final InternalScopeManager scopeManager;
public MavenSessionBuilderSupplier(RepositorySystem repositorySystem) {
this.repositorySystem = requireNonNull(repositorySystem);
+ this.scopeManager = new ScopeManagerImpl(Maven4ScopeManagerConfiguration.INSTANCE);
}
/**
@@ -72,33 +77,39 @@ public MavenSessionBuilderSupplier(RepositorySystem repositorySystem) {
@Deprecated
MavenSessionBuilderSupplier() {
this.repositorySystem = null;
+ this.scopeManager = new ScopeManagerImpl(Maven4ScopeManagerConfiguration.INSTANCE);
+ }
+
+ protected InternalScopeManager getScopeManager() {
+ return scopeManager;
}
protected DependencyTraverser getDependencyTraverser() {
return new FatArtifactTraverser();
}
- protected SystemScopeHandler getSystemScopeHandler() {
- return new MavenSystemScopeHandler();
+ protected DependencyManager getDependencyManager() {
+ return getDependencyManager(true); // same default as in Maven4
}
- protected DependencyManager getDependencyManager() {
- return new ClassicDependencyManager(true, getSystemScopeHandler()); // same default as in Maven4
+ public DependencyManager getDependencyManager(boolean transitive) {
+ return new ClassicDependencyManager(transitive, getScopeManager());
}
protected DependencySelector getDependencySelector() {
return new AndDependencySelector(
- new ScopeDependencySelector("test", "provided"),
- new OptionalDependencySelector(),
+ ScopeDependencySelector.legacy(
+ null, Arrays.asList(DependencyScope.TEST.id(), DependencyScope.PROVIDED.id())),
+ OptionalDependencySelector.fromDirect(),
new ExclusionDependencySelector());
}
protected DependencyGraphTransformer getDependencyGraphTransformer() {
return new ChainedDependencyGraphTransformer(
new ConflictResolver(
- new NearestVersionSelector(), new MavenScopeSelector(),
- new SimpleOptionalitySelector(), new MavenScopeDeriver()),
- new MavenDependencyContextRefiner());
+ new NearestVersionSelector(), new ManagedScopeSelector(getScopeManager()),
+ new SimpleOptionalitySelector(), new ManagedScopeDeriver(getScopeManager())),
+ new ManagedDependencyContextRefiner(getScopeManager()));
}
/**
@@ -127,6 +138,7 @@ protected void configureSessionBuilder(SessionBuilder session) {
session.setDependencyGraphTransformer(getDependencyGraphTransformer());
session.setArtifactTypeRegistry(getArtifactTypeRegistry());
session.setArtifactDescriptorPolicy(getArtifactDescriptorPolicy());
+ session.setScopeManager(getScopeManager());
}
/**
@@ -141,6 +153,7 @@ protected void configureSessionBuilder(SessionBuilder session) {
*/
@Override
public SessionBuilder get() {
+ requireNonNull(repositorySystem, "repositorySystem");
SessionBuilder builder = repositorySystem.createSessionBuilder();
configureSessionBuilder(builder);
return builder;
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/Maven3ScopeManagerConfiguration.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/Maven3ScopeManagerConfiguration.java
new file mode 100644
index 0000000000..bb3c543c45
--- /dev/null
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/Maven3ScopeManagerConfiguration.java
@@ -0,0 +1,169 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.repository.internal.scopes;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.stream.Collectors;
+
+import org.eclipse.aether.artifact.ArtifactProperties;
+import org.eclipse.aether.impl.scope.BuildScopeMatrixSource;
+import org.eclipse.aether.impl.scope.BuildScopeSource;
+import org.eclipse.aether.impl.scope.CommonBuilds;
+import org.eclipse.aether.impl.scope.InternalScopeManager;
+import org.eclipse.aether.impl.scope.ScopeManagerConfiguration;
+import org.eclipse.aether.internal.impl.scope.ScopeManagerDump;
+import org.eclipse.aether.scope.DependencyScope;
+import org.eclipse.aether.scope.ResolutionScope;
+
+import static org.eclipse.aether.impl.scope.BuildScopeQuery.all;
+import static org.eclipse.aether.impl.scope.BuildScopeQuery.byBuildPath;
+import static org.eclipse.aether.impl.scope.BuildScopeQuery.byProjectPath;
+import static org.eclipse.aether.impl.scope.BuildScopeQuery.select;
+import static org.eclipse.aether.impl.scope.BuildScopeQuery.singleton;
+import static org.eclipse.aether.impl.scope.BuildScopeQuery.union;
+
+/**
+ * Maven3 scope configurations. Configures scope manager to support Maven3 scopes.
+ *
+ * This manager supports the old Maven 3 dependency scopes.
+ *
+ * @since 2.0.0
+ */
+public final class Maven3ScopeManagerConfiguration implements ScopeManagerConfiguration {
+ public static final Maven3ScopeManagerConfiguration INSTANCE = new Maven3ScopeManagerConfiguration();
+ public static final String DS_COMPILE = "compile";
+ public static final String DS_RUNTIME = "runtime";
+ public static final String DS_PROVIDED = "provided";
+ public static final String DS_SYSTEM = "system";
+ public static final String DS_TEST = "test";
+ public static final String RS_NONE = "none";
+ public static final String RS_MAIN_COMPILE = "main-compile";
+ public static final String RS_MAIN_COMPILE_PLUS_RUNTIME = "main-compilePlusRuntime";
+ public static final String RS_MAIN_RUNTIME = "main-runtime";
+ public static final String RS_MAIN_RUNTIME_PLUS_SYSTEM = "main-runtimePlusSystem";
+ public static final String RS_TEST_COMPILE = "test-compile";
+ public static final String RS_TEST_RUNTIME = "test-runtime";
+
+ private Maven3ScopeManagerConfiguration() {}
+
+ @Override
+ public String getId() {
+ return "Maven3";
+ }
+
+ @Override
+ public boolean isStrictDependencyScopes() {
+ return false;
+ }
+
+ @Override
+ public boolean isStrictResolutionScopes() {
+ return false;
+ }
+
+ @Override
+ public BuildScopeSource getBuildScopeSource() {
+ return new BuildScopeMatrixSource(
+ Collections.singletonList(CommonBuilds.PROJECT_PATH_MAIN),
+ Arrays.asList(CommonBuilds.BUILD_PATH_COMPILE, CommonBuilds.BUILD_PATH_RUNTIME),
+ CommonBuilds.MAVEN_TEST_BUILD_SCOPE);
+ }
+
+ @Override
+ public Collection buildDependencyScopes(InternalScopeManager internalScopeManager) {
+ ArrayList result = new ArrayList<>();
+ result.add(internalScopeManager.createDependencyScope(DS_COMPILE, true, all()));
+ result.add(internalScopeManager.createDependencyScope(
+ DS_RUNTIME, true, byBuildPath(CommonBuilds.BUILD_PATH_RUNTIME)));
+ result.add(internalScopeManager.createDependencyScope(
+ DS_PROVIDED,
+ false,
+ union(
+ byBuildPath(CommonBuilds.BUILD_PATH_COMPILE),
+ select(CommonBuilds.PROJECT_PATH_TEST, CommonBuilds.BUILD_PATH_RUNTIME))));
+ result.add(internalScopeManager.createDependencyScope(
+ DS_TEST, false, byProjectPath(CommonBuilds.PROJECT_PATH_TEST)));
+ result.add(internalScopeManager.createSystemDependencyScope(
+ DS_SYSTEM, false, all(), ArtifactProperties.LOCAL_PATH));
+ return result;
+ }
+
+ @Override
+ public Collection buildResolutionScopes(InternalScopeManager internalScopeManager) {
+ Collection allDependencyScopes = internalScopeManager.getDependencyScopeUniverse();
+ Collection nonTransitiveDependencyScopes =
+ allDependencyScopes.stream().filter(s -> !s.isTransitive()).collect(Collectors.toSet());
+ DependencyScope system =
+ internalScopeManager.getDependencyScope(DS_SYSTEM).orElse(null);
+
+ ArrayList result = new ArrayList<>();
+ result.add(internalScopeManager.createResolutionScope(
+ RS_NONE,
+ InternalScopeManager.Mode.REMOVE,
+ Collections.emptySet(),
+ Collections.emptySet(),
+ allDependencyScopes));
+ result.add(internalScopeManager.createResolutionScope(
+ RS_MAIN_COMPILE,
+ InternalScopeManager.Mode.ELIMINATE,
+ singleton(CommonBuilds.PROJECT_PATH_MAIN, CommonBuilds.BUILD_PATH_COMPILE),
+ Collections.singletonList(system),
+ nonTransitiveDependencyScopes));
+ result.add(internalScopeManager.createResolutionScope(
+ RS_MAIN_COMPILE_PLUS_RUNTIME,
+ InternalScopeManager.Mode.ELIMINATE,
+ byProjectPath(CommonBuilds.PROJECT_PATH_MAIN),
+ Collections.singletonList(system),
+ nonTransitiveDependencyScopes));
+ result.add(internalScopeManager.createResolutionScope(
+ RS_MAIN_RUNTIME,
+ InternalScopeManager.Mode.ELIMINATE,
+ singleton(CommonBuilds.PROJECT_PATH_MAIN, CommonBuilds.BUILD_PATH_RUNTIME),
+ Collections.emptySet(),
+ nonTransitiveDependencyScopes));
+ result.add(internalScopeManager.createResolutionScope(
+ RS_MAIN_RUNTIME_PLUS_SYSTEM,
+ InternalScopeManager.Mode.ELIMINATE,
+ singleton(CommonBuilds.PROJECT_PATH_MAIN, CommonBuilds.BUILD_PATH_RUNTIME),
+ Collections.singletonList(system),
+ nonTransitiveDependencyScopes));
+ result.add(internalScopeManager.createResolutionScope(
+ RS_TEST_COMPILE,
+ InternalScopeManager.Mode.ELIMINATE,
+ select(CommonBuilds.PROJECT_PATH_TEST, CommonBuilds.BUILD_PATH_COMPILE),
+ Collections.singletonList(system),
+ nonTransitiveDependencyScopes));
+ result.add(internalScopeManager.createResolutionScope(
+ RS_TEST_RUNTIME,
+ InternalScopeManager.Mode.ELIMINATE,
+ select(CommonBuilds.PROJECT_PATH_TEST, CommonBuilds.BUILD_PATH_RUNTIME),
+ Collections.singletonList(system),
+ nonTransitiveDependencyScopes));
+ return result;
+ }
+
+ // ===
+
+ public static void main(String... args) {
+ ScopeManagerDump.dump(Maven3ScopeManagerConfiguration.INSTANCE);
+ }
+}
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/Maven4ScopeManagerConfiguration.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/Maven4ScopeManagerConfiguration.java
new file mode 100644
index 0000000000..f5668996e6
--- /dev/null
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/Maven4ScopeManagerConfiguration.java
@@ -0,0 +1,197 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.repository.internal.scopes;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.stream.Collectors;
+
+import org.apache.maven.api.DependencyScope;
+import org.apache.maven.repository.internal.artifact.MavenArtifactProperties;
+import org.eclipse.aether.impl.scope.BuildScopeMatrixSource;
+import org.eclipse.aether.impl.scope.BuildScopeSource;
+import org.eclipse.aether.impl.scope.CommonBuilds;
+import org.eclipse.aether.impl.scope.InternalScopeManager;
+import org.eclipse.aether.impl.scope.ScopeManagerConfiguration;
+import org.eclipse.aether.internal.impl.scope.ScopeManagerDump;
+
+import static org.eclipse.aether.impl.scope.BuildScopeQuery.all;
+import static org.eclipse.aether.impl.scope.BuildScopeQuery.byBuildPath;
+import static org.eclipse.aether.impl.scope.BuildScopeQuery.byProjectPath;
+import static org.eclipse.aether.impl.scope.BuildScopeQuery.select;
+import static org.eclipse.aether.impl.scope.BuildScopeQuery.singleton;
+import static org.eclipse.aether.impl.scope.BuildScopeQuery.union;
+
+/**
+ * Maven4 scope configurations. Configures scope manager to support Maven4 scopes.
+ *
+ * This manager supports all the new Maven 4 dependency scopes defined in {@link DependencyScope}.
+ *
+ * @since 2.0.0
+ */
+public final class Maven4ScopeManagerConfiguration implements ScopeManagerConfiguration {
+ public static final Maven4ScopeManagerConfiguration INSTANCE = new Maven4ScopeManagerConfiguration();
+
+ public static final String RS_NONE = "none";
+ public static final String RS_MAIN_COMPILE = "main-compile";
+ public static final String RS_MAIN_COMPILE_PLUS_RUNTIME = "main-compilePlusRuntime";
+ public static final String RS_MAIN_RUNTIME = "main-runtime";
+ public static final String RS_MAIN_RUNTIME_PLUS_SYSTEM = "main-runtimePlusSystem";
+ public static final String RS_TEST_COMPILE = "test-compile";
+ public static final String RS_TEST_RUNTIME = "test-runtime";
+
+ private Maven4ScopeManagerConfiguration() {}
+
+ @Override
+ public String getId() {
+ return "Maven4";
+ }
+
+ @Override
+ public boolean isStrictDependencyScopes() {
+ return false;
+ }
+
+ @Override
+ public boolean isStrictResolutionScopes() {
+ return false;
+ }
+
+ @Override
+ public BuildScopeSource getBuildScopeSource() {
+ return new BuildScopeMatrixSource(
+ Arrays.asList(CommonBuilds.PROJECT_PATH_MAIN, CommonBuilds.PROJECT_PATH_TEST),
+ Arrays.asList(CommonBuilds.BUILD_PATH_COMPILE, CommonBuilds.BUILD_PATH_RUNTIME));
+ }
+
+ @Override
+ public Collection buildDependencyScopes(
+ InternalScopeManager internalScopeManager) {
+ ArrayList result = new ArrayList<>();
+ result.add(internalScopeManager.createDependencyScope(
+ DependencyScope.COMPILE.id(), DependencyScope.COMPILE.isTransitive(), all()));
+ result.add(internalScopeManager.createDependencyScope(
+ DependencyScope.RUNTIME.id(),
+ DependencyScope.RUNTIME.isTransitive(),
+ byBuildPath(CommonBuilds.BUILD_PATH_RUNTIME)));
+ result.add(internalScopeManager.createDependencyScope(
+ DependencyScope.PROVIDED.id(),
+ DependencyScope.PROVIDED.isTransitive(),
+ union(
+ byBuildPath(CommonBuilds.BUILD_PATH_COMPILE),
+ select(CommonBuilds.PROJECT_PATH_TEST, CommonBuilds.BUILD_PATH_RUNTIME))));
+ result.add(internalScopeManager.createDependencyScope(
+ DependencyScope.TEST.id(),
+ DependencyScope.TEST.isTransitive(),
+ byProjectPath(CommonBuilds.PROJECT_PATH_TEST)));
+ result.add(internalScopeManager.createDependencyScope(
+ DependencyScope.NONE.id(), DependencyScope.NONE.isTransitive(), Collections.emptySet()));
+ result.add(internalScopeManager.createDependencyScope(
+ DependencyScope.COMPILE_ONLY.id(),
+ DependencyScope.COMPILE_ONLY.isTransitive(),
+ singleton(CommonBuilds.PROJECT_PATH_MAIN, CommonBuilds.BUILD_PATH_COMPILE)));
+ result.add(internalScopeManager.createDependencyScope(
+ DependencyScope.TEST_RUNTIME.id(),
+ DependencyScope.TEST_RUNTIME.isTransitive(),
+ singleton(CommonBuilds.PROJECT_PATH_TEST, CommonBuilds.BUILD_PATH_RUNTIME)));
+ result.add(internalScopeManager.createDependencyScope(
+ DependencyScope.TEST_ONLY.id(),
+ DependencyScope.TEST_ONLY.isTransitive(),
+ singleton(CommonBuilds.PROJECT_PATH_TEST, CommonBuilds.BUILD_PATH_COMPILE)));
+
+ // system
+ result.add(internalScopeManager.createSystemDependencyScope(
+ DependencyScope.SYSTEM.id(),
+ DependencyScope.SYSTEM.isTransitive(),
+ all(),
+ MavenArtifactProperties.LOCAL_PATH));
+
+ // == sanity check
+ if (result.size() != org.apache.maven.api.DependencyScope.values().length - 1) { // sans "undefined"
+ throw new IllegalStateException("Maven4 API dependency scope mismatch");
+ }
+
+ return result;
+ }
+
+ @Override
+ public Collection buildResolutionScopes(
+ InternalScopeManager internalScopeManager) {
+ Collection allDependencyScopes =
+ internalScopeManager.getDependencyScopeUniverse();
+ Collection nonTransitiveDependencyScopes =
+ allDependencyScopes.stream().filter(s -> !s.isTransitive()).collect(Collectors.toSet());
+ org.eclipse.aether.scope.DependencyScope system = internalScopeManager
+ .getDependencyScope(DependencyScope.SYSTEM.id())
+ .orElse(null);
+
+ ArrayList result = new ArrayList<>();
+ result.add(internalScopeManager.createResolutionScope(
+ RS_NONE,
+ InternalScopeManager.Mode.REMOVE,
+ Collections.emptySet(),
+ Collections.emptySet(),
+ allDependencyScopes));
+ result.add(internalScopeManager.createResolutionScope(
+ RS_MAIN_COMPILE,
+ InternalScopeManager.Mode.ELIMINATE,
+ singleton(CommonBuilds.PROJECT_PATH_MAIN, CommonBuilds.BUILD_PATH_COMPILE),
+ Collections.singletonList(system),
+ nonTransitiveDependencyScopes));
+ result.add(internalScopeManager.createResolutionScope(
+ RS_MAIN_COMPILE_PLUS_RUNTIME,
+ InternalScopeManager.Mode.ELIMINATE,
+ byProjectPath(CommonBuilds.PROJECT_PATH_MAIN),
+ Collections.singletonList(system),
+ nonTransitiveDependencyScopes));
+ result.add(internalScopeManager.createResolutionScope(
+ RS_MAIN_RUNTIME,
+ InternalScopeManager.Mode.REMOVE,
+ singleton(CommonBuilds.PROJECT_PATH_MAIN, CommonBuilds.BUILD_PATH_RUNTIME),
+ Collections.emptySet(),
+ nonTransitiveDependencyScopes));
+ result.add(internalScopeManager.createResolutionScope(
+ RS_MAIN_RUNTIME_PLUS_SYSTEM,
+ InternalScopeManager.Mode.REMOVE,
+ singleton(CommonBuilds.PROJECT_PATH_MAIN, CommonBuilds.BUILD_PATH_RUNTIME),
+ Collections.singletonList(system),
+ nonTransitiveDependencyScopes));
+ result.add(internalScopeManager.createResolutionScope(
+ RS_TEST_COMPILE,
+ InternalScopeManager.Mode.ELIMINATE,
+ select(CommonBuilds.PROJECT_PATH_TEST, CommonBuilds.BUILD_PATH_COMPILE),
+ Collections.singletonList(system),
+ nonTransitiveDependencyScopes));
+ result.add(internalScopeManager.createResolutionScope(
+ RS_TEST_RUNTIME,
+ InternalScopeManager.Mode.ELIMINATE,
+ select(CommonBuilds.PROJECT_PATH_TEST, CommonBuilds.BUILD_PATH_RUNTIME),
+ Collections.singletonList(system),
+ nonTransitiveDependencyScopes));
+ return result;
+ }
+
+ // ===
+
+ public static void main(String... args) {
+ ScopeManagerDump.dump(Maven4ScopeManagerConfiguration.INSTANCE);
+ }
+}
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenDependencyContextRefiner.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenDependencyContextRefiner.java
deleted file mode 100644
index c1b5d70cf8..0000000000
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenDependencyContextRefiner.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.maven.repository.internal.scopes;
-
-import org.eclipse.aether.RepositoryException;
-import org.eclipse.aether.collection.DependencyGraphTransformationContext;
-import org.eclipse.aether.collection.DependencyGraphTransformer;
-import org.eclipse.aether.graph.Dependency;
-import org.eclipse.aether.graph.DependencyNode;
-
-import static java.util.Objects.requireNonNull;
-
-/**
- * A dependency graph transformer that refines the request context for nodes that belong to the "project" context by
- * appending the buildpath type to which the node belongs. For instance, a compile-time project dependency will be
- * assigned the request context "project/compile".
- *
- * @see DependencyNode#getRequestContext()
- *
- * @since 4.0.0
- */
-public final class MavenDependencyContextRefiner implements DependencyGraphTransformer {
-
- public MavenDependencyContextRefiner() {}
-
- @Override
- public DependencyNode transformGraph(DependencyNode node, DependencyGraphTransformationContext context)
- throws RepositoryException {
- requireNonNull(node, "node cannot be null");
- requireNonNull(context, "context cannot be null");
- String ctx = node.getRequestContext();
-
- if ("project".equals(ctx)) {
- String scope = getBuildpathScope(node);
- if (scope != null) {
- ctx += '/' + scope;
- node.setRequestContext(ctx);
- }
- }
-
- for (DependencyNode child : node.getChildren()) {
- transformGraph(child, context);
- }
-
- return node;
- }
-
- private String getBuildpathScope(DependencyNode node) {
- Dependency dependency = node.getDependency();
- if (dependency == null) {
- return null;
- }
-
- String scope = dependency.getScope();
-
- if (MavenDependencyScopes.COMPILE.equals(scope)
- || MavenDependencyScopes.SYSTEM.equals(scope)
- || MavenDependencyScopes.PROVIDED.equals(scope)) {
- return MavenDependencyScopes.COMPILE;
- } else if (MavenDependencyScopes.RUNTIME.equals(scope)) {
- return MavenDependencyScopes.RUNTIME;
- } else if (MavenDependencyScopes.TEST.equals(scope)) {
- return MavenDependencyScopes.TEST;
- }
-
- return null;
- }
-}
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenDependencyScopes.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenDependencyScopes.java
deleted file mode 100644
index 05d8159e73..0000000000
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenDependencyScopes.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.maven.repository.internal.scopes;
-
-import org.apache.maven.api.DependencyScope;
-
-/**
- * The dependency scopes used for Java dependencies in Maven. This class defines labels only, that are doing pass-thru
- * over Resolver. The labels are defined in {@link DependencyScope} class, these are here used only for "easier
- * reachability" in internal classes.
- *
- * @since 4.0.0
- */
-public final class MavenDependencyScopes {
-
- public static final String SYSTEM = DependencyScope.SYSTEM.id();
-
- public static final String NONE = DependencyScope.NONE.id();
-
- public static final String COMPILE_ONLY = DependencyScope.COMPILE_ONLY.id();
-
- public static final String COMPILE = DependencyScope.COMPILE.id();
-
- public static final String PROVIDED = DependencyScope.PROVIDED.id();
-
- public static final String RUNTIME = DependencyScope.RUNTIME.id();
-
- public static final String TEST_ONLY = DependencyScope.TEST_ONLY.id();
-
- public static final String TEST = DependencyScope.TEST.id();
-
- public static final String TEST_RUNTIME = DependencyScope.TEST_RUNTIME.id();
-
- private MavenDependencyScopes() {
- // hide constructor
- }
-}
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenScopeDeriver.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenScopeDeriver.java
deleted file mode 100644
index 20f76a5285..0000000000
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenScopeDeriver.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.maven.repository.internal.scopes;
-
-import org.eclipse.aether.RepositoryException;
-import org.eclipse.aether.util.graph.transformer.ConflictResolver;
-import org.eclipse.aether.util.graph.transformer.ConflictResolver.ScopeContext;
-import org.eclipse.aether.util.graph.transformer.ConflictResolver.ScopeDeriver;
-
-/**
- * A scope deriver for use with {@link ConflictResolver} that supports the scopes from {@link MavenDependencyScopes}.
- *
- * @since 4.0.0
- */
-public final class MavenScopeDeriver extends ScopeDeriver {
-
- public MavenScopeDeriver() {}
-
- @Override
- public void deriveScope(ScopeContext context) throws RepositoryException {
- context.setDerivedScope(getDerivedScope(context.getParentScope(), context.getChildScope()));
- }
-
- private String getDerivedScope(String parentScope, String childScope) {
- String derivedScope;
-
- if (MavenDependencyScopes.SYSTEM.equals(childScope) || MavenDependencyScopes.TEST.equals(childScope)) {
- derivedScope = childScope;
- } else if (parentScope == null || parentScope.isEmpty() || MavenDependencyScopes.COMPILE.equals(parentScope)) {
- derivedScope = childScope;
- } else if (MavenDependencyScopes.TEST.equals(parentScope)
- || MavenDependencyScopes.RUNTIME.equals(parentScope)) {
- derivedScope = parentScope;
- } else if (MavenDependencyScopes.SYSTEM.equals(parentScope)
- || MavenDependencyScopes.PROVIDED.equals(parentScope)) {
- derivedScope = MavenDependencyScopes.PROVIDED;
- } else {
- derivedScope = MavenDependencyScopes.RUNTIME;
- }
-
- return derivedScope;
- }
-}
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenScopeSelector.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenScopeSelector.java
deleted file mode 100644
index 193c1d0375..0000000000
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenScopeSelector.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.maven.repository.internal.scopes;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.eclipse.aether.RepositoryException;
-import org.eclipse.aether.util.graph.transformer.ConflictResolver;
-import org.eclipse.aether.util.graph.transformer.ConflictResolver.ConflictContext;
-import org.eclipse.aether.util.graph.transformer.ConflictResolver.ConflictItem;
-import org.eclipse.aether.util.graph.transformer.ConflictResolver.ScopeSelector;
-
-/**
- * A scope selector for use with {@link ConflictResolver} that supports the scopes from {@link MavenDependencyScopes}.
- * In general, this selector picks the widest scope present among conflicting dependencies where e.g. "compile" is
- * wider than "runtime" which is wider than "test". If however a direct dependency is involved, its scope is selected.
- *
- * @since 4.0.0
- */
-public final class MavenScopeSelector extends ScopeSelector {
-
- public MavenScopeSelector() {}
-
- @Override
- public void selectScope(ConflictContext context) throws RepositoryException {
- String scope = context.getWinner().getDependency().getScope();
- if (!MavenDependencyScopes.SYSTEM.equals(scope)) {
- scope = chooseEffectiveScope(context.getItems());
- }
- context.setScope(scope);
- }
-
- private String chooseEffectiveScope(Collection items) {
- Set scopes = new HashSet<>();
- for (ConflictItem item : items) {
- if (item.getDepth() <= 1) {
- return item.getDependency().getScope();
- }
- scopes.addAll(item.getScopes());
- }
- return chooseEffectiveScope(scopes);
- }
-
- private String chooseEffectiveScope(Set scopes) {
- if (scopes.size() > 1) {
- scopes.remove(MavenDependencyScopes.SYSTEM);
- }
-
- String effectiveScope = "";
-
- if (scopes.size() == 1) {
- effectiveScope = scopes.iterator().next();
- } else if (scopes.contains(MavenDependencyScopes.COMPILE)) {
- effectiveScope = MavenDependencyScopes.COMPILE;
- } else if (scopes.contains(MavenDependencyScopes.RUNTIME)) {
- effectiveScope = MavenDependencyScopes.RUNTIME;
- } else if (scopes.contains(MavenDependencyScopes.PROVIDED)) {
- effectiveScope = MavenDependencyScopes.PROVIDED;
- } else if (scopes.contains(MavenDependencyScopes.TEST)) {
- effectiveScope = MavenDependencyScopes.TEST;
- }
-
- return effectiveScope;
- }
-}
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenSystemScopeHandler.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenSystemScopeHandler.java
deleted file mode 100644
index 8384fe26a9..0000000000
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenSystemScopeHandler.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.maven.repository.internal.scopes;
-
-import java.util.Map;
-
-import org.apache.maven.repository.internal.artifact.MavenArtifactProperties;
-import org.eclipse.aether.SystemScopeHandler;
-import org.eclipse.aether.artifact.Artifact;
-
-/**
- * A system scope handler.
- *
- * @since 4.0.0
- */
-public final class MavenSystemScopeHandler implements SystemScopeHandler {
- @Override
- public boolean isSystemScope(String scope) {
- return MavenDependencyScopes.SYSTEM.equals(scope);
- }
-
- @Override
- public String getSystemPath(Artifact artifact) {
- return artifact.getProperty(MavenArtifactProperties.LOCAL_PATH, null);
- }
-
- @Override
- public void setSystemPath(Map properties, String systemPath) {
- if (systemPath == null) {
- properties.remove(MavenArtifactProperties.LOCAL_PATH);
- } else {
- properties.put(MavenArtifactProperties.LOCAL_PATH, systemPath);
- }
- }
-}
diff --git a/pom.xml b/pom.xml
index 9dd8c868b2..9a330126fe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -182,7 +182,7 @@ under the License.
1.26
1.0.0
4.0.1
- 2.0.0-alpha-8
+ 2.0.0-SNAPSHOT
2.0
0.9.0.M2
2.0.11