Skip to content

Commit

Permalink
[MNG-8026] Maven drives regarding scopes
Browse files Browse the repository at this point in the history
This is step one: basically moved (copied, as resolver bits
are deprecated) all the classes dealing with scopes (and
their interpretation) to Maven.

---

https://issues.apache.org/jira/browse/MNG-8026
  • Loading branch information
cstamas committed Jan 24, 2024
1 parent f2595c8 commit 420b1ae
Show file tree
Hide file tree
Showing 21 changed files with 479 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@
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.legacy.repository.ArtifactRepositoryFactory;
import org.apache.maven.rtinfo.RuntimeInformation;
import org.codehaus.plexus.PlexusContainer;
Expand All @@ -62,9 +65,6 @@
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.JavaDependencyContextRefiner;
import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver;
import org.eclipse.aether.util.graph.transformer.JavaScopeSelector;
import org.eclipse.aether.util.graph.transformer.NearestVersionSelector;
import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
import org.eclipse.aether.util.graph.traverser.FatArtifactTraverser;
Expand Down Expand Up @@ -314,9 +314,9 @@ protected DefaultRepositorySystemSession initRepoSession() throws Exception {
session.setDependencySelector(depFilter);

DependencyGraphTransformer transformer = new ConflictResolver(
new NearestVersionSelector(), new JavaScopeSelector(),
new SimpleOptionalitySelector(), new JavaScopeDeriver());
transformer = new ChainedDependencyGraphTransformer(transformer, new JavaDependencyContextRefiner());
new NearestVersionSelector(), new MavenScopeSelector(),
new SimpleOptionalitySelector(), new MavenScopeDeriver());
transformer = new ChainedDependencyGraphTransformer(transformer, new MavenDependencyContextRefiner());
session.setDependencyGraphTransformer(transformer);

LocalRepository localRepo = new LocalRepository(localRepository().getBasedir());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
import org.apache.maven.internal.xml.XmlNodeImpl;
import org.apache.maven.internal.xml.XmlPlexusConfiguration;
import org.apache.maven.model.ModelBase;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.apache.maven.repository.internal.MavenSessionBuilderSupplier;
import org.apache.maven.resolver.RepositorySystemSessionFactory;
import org.apache.maven.rtinfo.RuntimeInformation;
import org.apache.maven.settings.Mirror;
Expand Down Expand Up @@ -220,8 +220,8 @@ public SessionBuilder newRepositorySessionBuilder(MavenExecutionRequest request)
requestExtender.extend(request);
}

SessionBuilder sessionBuilder = MavenRepositorySystemUtils.newSession(
repoSystem.createSessionBuilder(), new TypeRegistryAdapter(typeRegistry));
SessionBuilder sessionBuilder = new MavenSessionBuilderSupplier(repoSystem).get();
sessionBuilder.setArtifactTypeRegistry(new TypeRegistryAdapter(typeRegistry));
sessionBuilder.setCache(request.getRepositoryCache());

// this map is read ONLY to get config from (profiles + env + system + user)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.PluginResolutionException;
import org.apache.maven.repository.internal.scopes.MavenDependencyScopes;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
Expand All @@ -52,7 +53,6 @@
import org.eclipse.aether.resolution.DependencyRequest;
import org.eclipse.aether.resolution.DependencyResolutionException;
import org.eclipse.aether.resolution.DependencyResult;
import org.eclipse.aether.util.artifact.JavaScopes;
import org.eclipse.aether.util.filter.AndDependencyFilter;
import org.eclipse.aether.util.filter.ScopeDependencyFilter;
import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
Expand Down Expand Up @@ -211,8 +211,8 @@ private DependencyResult resolveInternal(
for (Dependency dependency : plugin.getDependencies()) {
org.eclipse.aether.graph.Dependency pluginDep =
RepositoryUtils.toDependency(dependency, session.getArtifactTypeRegistry());
if (!JavaScopes.SYSTEM.equals(pluginDep.getScope())) {
pluginDep = pluginDep.setScope(JavaScopes.RUNTIME);
if (!MavenDependencyScopes.SYSTEM.equals(pluginDep.getScope())) {
pluginDep = pluginDep.setScope(MavenDependencyScopes.RUNTIME);
}
request.addDependency(pluginDep);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@
import javax.inject.Singleton;

import org.apache.maven.plugin.PluginValidationManager;
import org.apache.maven.repository.internal.scopes.MavenDependencyScopes;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.resolution.ArtifactDescriptorResult;
import org.eclipse.aether.util.artifact.JavaScopes;

/**
* Detects Maven3 plugins using maven-compat Maven2 compatibility layer.
Expand All @@ -50,7 +50,7 @@ protected void doValidate(
for (org.eclipse.aether.graph.Dependency dependency : artifactDescriptorResult.getDependencies()) {
if ("org.apache.maven".equals(dependency.getArtifact().getGroupId())
&& "maven-compat".equals(dependency.getArtifact().getArtifactId())
&& !JavaScopes.TEST.equals(dependency.getScope())) {
&& !MavenDependencyScopes.TEST.equals(dependency.getScope())) {
pluginValidationManager.reportPluginValidationIssue(
PluginValidationManager.IssueLocality.EXTERNAL,
session,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@
import java.util.stream.Collectors;

import org.apache.maven.plugin.PluginValidationManager;
import org.apache.maven.repository.internal.scopes.MavenDependencyScopes;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.resolution.ArtifactDescriptorResult;
import org.eclipse.aether.util.artifact.JavaScopes;

/**
* Detects Maven3 dependencies scope.
Expand All @@ -51,7 +51,8 @@ protected void doValidate(
Artifact pluginArtifact,
ArtifactDescriptorResult artifactDescriptorResult) {
Set<String> mavenArtifacts = artifactDescriptorResult.getDependencies().stream()
.filter(d -> !JavaScopes.PROVIDED.equals(d.getScope()) && !JavaScopes.TEST.equals(d.getScope()))
.filter(d -> !MavenDependencyScopes.PROVIDED.equals(d.getScope())
&& !MavenDependencyScopes.TEST.equals(d.getScope()))
.map(org.eclipse.aether.graph.Dependency::getArtifact)
.filter(a -> "org.apache.maven".equals(a.getGroupId()))
.filter(a -> !DefaultPluginValidationManager.EXPECTED_PROVIDED_SCOPE_EXCLUSIONS_GA.contains(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import org.apache.maven.model.Dependency;
import org.apache.maven.model.DependencyManagement;
import org.apache.maven.model.Exclusion;
import org.apache.maven.repository.internal.scopes.MavenDependencyScopes;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
Expand All @@ -47,7 +48,6 @@
import org.eclipse.aether.resolution.ArtifactResult;
import org.eclipse.aether.resolution.DependencyRequest;
import org.eclipse.aether.util.artifact.ArtifactIdUtils;
import org.eclipse.aether.util.artifact.JavaScopes;
import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -130,7 +130,7 @@ public DependencyResolutionResult resolve(DependencyResolutionRequest request)
Dependency dependency = dependencies.get(key);
Collection<Exclusion> exclusions = dependency != null ? dependency.getExclusions() : null;
org.eclipse.aether.graph.Dependency dep = RepositoryUtils.toDependency(artifact, exclusions);
if (!JavaScopes.SYSTEM.equals(dep.getScope())
if (!MavenDependencyScopes.SYSTEM.equals(dep.getScope())
&& dep.getArtifact().getFile() != null) {
// enable re-resolution
org.eclipse.aether.artifact.Artifact art = dep.getArtifact();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,12 @@
import org.apache.maven.project.DefaultProjectBuildingRequest;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.apache.maven.repository.internal.MavenSessionBuilderSupplier;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.testing.PlexusTest;
import org.codehaus.plexus.util.FileUtils;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.repository.LocalRepository;

import static org.codehaus.plexus.testing.PlexusExtension.getBasedir;
Expand All @@ -64,7 +63,10 @@ public abstract class AbstractCoreMavenComponentTestCase {
protected PlexusContainer container;

@Inject
protected MavenRepositorySystem repositorySystem;
protected RepositorySystem repositorySystem;

@Inject
protected MavenRepositorySystem mavenRepositorySystem;

@Inject
protected org.apache.maven.project.ProjectBuilder projectBuilder;
Expand Down Expand Up @@ -160,9 +162,11 @@ protected MavenSession createMavenSession(File pom, Properties executionProperti

protected void initRepoSession(ProjectBuildingRequest request) throws Exception {
File localRepoDir = new File(request.getLocalRepository().getBasedir());
LocalRepository localRepo = new LocalRepository(localRepoDir);
DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
session.setLocalRepositoryManager(new SimpleLocalRepositoryManagerFactory().newInstance(session, localRepo));
LocalRepository localRepo = new LocalRepository(localRepoDir, "simple");
RepositorySystemSession session = new MavenSessionBuilderSupplier(repositorySystem)
.get()
.withLocalRepositories(localRepo)
.build();
request.setRepositorySession(session);
}

Expand All @@ -188,7 +192,7 @@ protected List<ArtifactRepository> getRemoteRepositories() throws InvalidReposit
repository.setReleases(policy);
repository.setSnapshots(policy);

return Arrays.asList(repositorySystem.buildArtifactRepository(repository));
return Arrays.asList(mavenRepositorySystem.buildArtifactRepository(repository));
}

protected List<ArtifactRepository> getPluginArtifactRepositories() throws InvalidRepositoryException {
Expand All @@ -198,7 +202,7 @@ protected List<ArtifactRepository> getPluginArtifactRepositories() throws Invali
protected ArtifactRepository getLocalRepository() throws InvalidRepositoryException {
File repoDir = new File(getBasedir(), "target/local-repo").getAbsoluteFile();

return repositorySystem.createLocalRepository(repoDir);
return mavenRepositorySystem.createLocalRepository(repoDir);
}

protected class ProjectBuilder {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import org.apache.maven.execution.DefaultMavenExecutionRequest;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.root.RootLocator;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.junit.jupiter.api.Test;
Expand All @@ -37,7 +37,7 @@ public class DefaultSessionTest {

@Test
void testRootDirectoryWithNull() {
RepositorySystemSession rss = MavenRepositorySystemUtils.newSession();
RepositorySystemSession rss = new DefaultRepositorySystemSession(h -> false);
DefaultMavenExecutionRequest mer = new DefaultMavenExecutionRequest();
MavenSession ms = new MavenSession(null, rss, mer, null);
DefaultSession session =
Expand All @@ -51,7 +51,7 @@ void testRootDirectoryWithNull() {

@Test
void testRootDirectory() {
RepositorySystemSession rss = MavenRepositorySystemUtils.newSession();
RepositorySystemSession rss = new DefaultRepositorySystemSession(h -> false);
DefaultMavenExecutionRequest mer = new DefaultMavenExecutionRequest();
MavenSession ms = new MavenSession(null, rss, mer, null);
ms.getRequest().setRootDirectory(Paths.get("myRootDirectory"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import javax.inject.Inject;

import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
Expand Down Expand Up @@ -47,7 +48,7 @@
import org.apache.maven.execution.DefaultMavenExecutionResult;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.execution.scope.internal.MojoExecutionScope;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.apache.maven.repository.internal.MavenSessionBuilderSupplier;
import org.apache.maven.rtinfo.RuntimeInformation;
import org.apache.maven.session.scope.internal.SessionScope;
import org.apache.maven.toolchain.DefaultToolchainManagerPrivate;
Expand Down Expand Up @@ -105,7 +106,11 @@ class TestApi {

@BeforeEach
void setup() {
RepositorySystemSession rss = MavenRepositorySystemUtils.newSession();
// create session with any local repo, is redefined anyway below
RepositorySystemSession rss = new MavenSessionBuilderSupplier(repositorySystem)
.get()
.withLocalRepositoryBaseDirectories(new File("target"))
.build();
DefaultMavenExecutionRequest mer = new DefaultMavenExecutionRequest();
DefaultMavenExecutionResult meres = new DefaultMavenExecutionResult();
MavenSession ms = new MavenSession(rss, mer, meres);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@

import java.net.MalformedURLException;

import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.testing.PlexusTest;
import org.eclipse.aether.DefaultRepositorySystemSession;
Expand Down Expand Up @@ -57,7 +56,7 @@ protected PlexusContainer getContainer() {
}

public static RepositorySystemSession newMavenRepositorySystemSession(RepositorySystem system) {
DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
DefaultRepositorySystemSession session = new DefaultRepositorySystemSession(h -> false);

LocalRepository localRepo = new LocalRepository("target/local-repo");
session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
import org.apache.maven.bridge.MavenRepositorySystem;
import org.apache.maven.model.building.ModelBuildingException;
import org.apache.maven.model.building.ModelProblem;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.testing.PlexusTest;
import org.eclipse.aether.DefaultRepositoryCache;
Expand Down Expand Up @@ -145,7 +144,7 @@ protected ProjectBuildingRequest newBuildingRequest() throws Exception {

protected void initRepoSession(ProjectBuildingRequest request) {
File localRepo = new File(request.getLocalRepository().getBasedir());
DefaultRepositorySystemSession repoSession = MavenRepositorySystemUtils.newSession();
DefaultRepositorySystemSession repoSession = new DefaultRepositorySystemSession(h -> false);
repoSession.setCache(new DefaultRepositoryCache());
repoSession.setLocalRepositoryManager(new LegacyLocalRepositoryManager(localRepo));
request.setRepositorySession(repoSession);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
import org.apache.maven.model.ReportSet;
import org.apache.maven.model.building.ModelBuildingRequest;
import org.apache.maven.project.harness.PomTestWrapper;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.codehaus.plexus.testing.PlexusTest;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
Expand Down Expand Up @@ -1887,7 +1886,7 @@ private PomTestWrapper buildPom(
? ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0
: ModelBuildingRequest.VALIDATION_LEVEL_STRICT);

DefaultRepositorySystemSession repoSession = MavenRepositorySystemUtils.newSession();
DefaultRepositorySystemSession repoSession = new DefaultRepositorySystemSession(h -> false);
LocalRepository localRepo =
new LocalRepository(config.getLocalRepository().getBasedir());
repoSession.setLocalRepositoryManager(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
import org.apache.maven.model.Parent;
import org.apache.maven.model.resolution.ModelResolver;
import org.apache.maven.model.resolution.UnresolvableModelException;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.impl.RemoteRepositoryManager;
Expand Down Expand Up @@ -191,7 +190,7 @@ void testResolveDependencySuccessfullyResolvesExistingDependencyUsingHighestVers

private ModelResolver newModelResolver() throws Exception {
final File localRepo = new File(this.getLocalRepository().getBasedir());
final DefaultRepositorySystemSession repoSession = MavenRepositorySystemUtils.newSession();
final DefaultRepositorySystemSession repoSession = new DefaultRepositorySystemSession(h -> false);
repoSession.setLocalRepositoryManager(new LegacyLocalRepositoryManager(localRepo));

return new ProjectModelResolver(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
import org.apache.maven.project.DefaultProjectBuildingRequest;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.project.harness.PomTestWrapper;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.apache.maven.settings.v4.SettingsStaxReader;
import org.codehaus.plexus.testing.PlexusTest;
import org.eclipse.aether.DefaultRepositorySystemSession;
Expand Down Expand Up @@ -111,7 +110,7 @@ private PomTestWrapper buildPom(String pomPath) throws Exception {
"local", localRepoUrl, new DefaultRepositoryLayout(), null, null));
config.setActiveProfileIds(settings.getActiveProfiles());

DefaultRepositorySystemSession repoSession = MavenRepositorySystemUtils.newSession();
DefaultRepositorySystemSession repoSession = new DefaultRepositorySystemSession(h -> false);
LocalRepository localRepo =
new LocalRepository(config.getLocalRepository().getBasedir());
repoSession.setLocalRepositoryManager(
Expand Down

0 comments on commit 420b1ae

Please sign in to comment.