This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new 3c2f8ebdb7 Use v4 api to resolve project dependencies (#1409)
3c2f8ebdb7 is described below

commit 3c2f8ebdb7719de74874a48ebd631fd66cb242c2
Author: Guillaume Nodet <gno...@gmail.com>
AuthorDate: Thu Feb 29 00:30:57 2024 +0100

    Use v4 api to resolve project dependencies (#1409)
---
 .../main/java/org/apache/maven/api/Session.java    |  2 +-
 .../maven/internal/impl/AbstractSession.java       |  2 +-
 .../internal/impl/DefaultDependencyCollector.java  | 43 ++++++++++++++--------
 .../internal/impl/DefaultDependencyResolver.java   | 27 +-------------
 .../apache/maven/internal/impl/DefaultProject.java |  3 +-
 .../plugin/internal/DefaultMavenPluginManager.java |  6 +++
 6 files changed, 39 insertions(+), 44 deletions(-)

diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java 
b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java
index 4f414fe1fe..0bc177f75a 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java
@@ -510,7 +510,7 @@ public interface Session {
 
     ProjectScope requireProjectScope(String id);
 
-    DependencyScope requireDependencyScope(String id);
+    DependencyScope requireDependencyScope(@Nonnull String id);
 
     PathScope requirePathScope(String id);
 }
diff --git 
a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java 
b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java
index f3bdb2be33..0558c6ac14 100644
--- 
a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java
+++ 
b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java
@@ -560,7 +560,7 @@ public abstract class AbstractSession implements 
InternalSession {
 
     @Override
     public DependencyScope requireDependencyScope(String id) {
-        return DependencyScope.forId(id);
+        return DependencyScope.forId(nonNull(id, "id"));
     }
 
     @Override
diff --git 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCollector.java
 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCollector.java
index 41adae1cd2..15ec1ba0f0 100644
--- 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCollector.java
+++ 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCollector.java
@@ -21,21 +21,17 @@ package org.apache.maven.internal.impl;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
+import java.util.Collection;
 import java.util.List;
 
-import org.apache.maven.api.Node;
+import org.apache.maven.api.*;
 import org.apache.maven.api.annotations.Nonnull;
-import org.apache.maven.api.services.DependencyCollector;
-import org.apache.maven.api.services.DependencyCollectorException;
-import org.apache.maven.api.services.DependencyCollectorRequest;
-import org.apache.maven.api.services.DependencyCollectorResult;
+import org.apache.maven.api.services.*;
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.artifact.Artifact;
 import org.eclipse.aether.collection.CollectRequest;
 import org.eclipse.aether.collection.CollectResult;
 import org.eclipse.aether.collection.DependencyCollectionException;
-import org.eclipse.aether.graph.Dependency;
 import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
 import org.eclipse.aether.util.graph.transformer.ConflictResolver;
 
@@ -52,16 +48,31 @@ public class DefaultDependencyCollector implements 
DependencyCollector {
         nonNull(request, "request");
         InternalSession session = InternalSession.from(request.getSession());
 
-        Artifact rootArtifact =
-                
request.getRootArtifact().map(session::toArtifact).orElse(null);
-        Dependency root =
-                request.getRoot().map(d -> session.toDependency(d, 
false)).orElse(null);
+        Artifact rootArtifact;
+        DependencyCoordinate root;
+        Collection<DependencyCoordinate> dependencies;
+        Collection<DependencyCoordinate> managedDependencies;
+        List<RemoteRepository> remoteRepositories;
+        if (request.getProject().isPresent()) {
+            Project project = request.getProject().get();
+            rootArtifact = project.getPomArtifact();
+            root = null;
+            dependencies = project.getDependencies();
+            managedDependencies = project.getManagedDependencies();
+            remoteRepositories = 
session.getService(ProjectManager.class).getRemoteProjectRepositories(project);
+        } else {
+            rootArtifact = request.getRootArtifact().orElse(null);
+            root = request.getRoot().orElse(null);
+            dependencies = request.getDependencies();
+            managedDependencies = request.getManagedDependencies();
+            remoteRepositories = session.getRemoteRepositories();
+        }
         CollectRequest collectRequest = new CollectRequest()
-                .setRootArtifact(rootArtifact)
-                .setRoot(root)
-                
.setDependencies(session.toDependencies(request.getDependencies(), false))
-                
.setManagedDependencies(session.toDependencies(request.getManagedDependencies(),
 true))
-                
.setRepositories(session.toRepositories(session.getRemoteRepositories()));
+                .setRootArtifact(rootArtifact != null ? 
session.toArtifact(rootArtifact) : null)
+                .setRoot(root != null ? session.toDependency(root, false) : 
null)
+                .setDependencies(session.toDependencies(dependencies, false))
+                
.setManagedDependencies(session.toDependencies(managedDependencies, true))
+                .setRepositories(session.toRepositories(remoteRepositories));
 
         RepositorySystemSession systemSession = session.getSession();
         if (request.getVerbose()) {
diff --git 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
index 298576d5f4..391075dd6b 100644
--- 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
+++ 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
@@ -72,31 +72,8 @@ public class DefaultDependencyResolver implements 
DependencyResolver {
     @Override
     public DependencyResolverResult resolve(DependencyResolverRequest request)
             throws DependencyCollectorException, DependencyResolverException, 
ArtifactResolverException {
-        nonNull(request, "request can not be null");
-        InternalSession session = InternalSession.from(request.getSession());
-
-        if (request.getProject().isPresent()) {
-            DependencyResolutionResult result = resolveDependencies(
-                    request.getSession(), request.getProject().get(), 
request.getPathScope());
-
-            Map<org.eclipse.aether.graph.Dependency, 
org.eclipse.aether.graph.DependencyNode> nodes = stream(
-                            result.getDependencyGraph())
-                    .filter(n -> n.getDependency() != null)
-                    .collect(Collectors.toMap(DependencyNode::getDependency, n 
-> n));
-
-            Node root = session.getNode(result.getDependencyGraph());
-            List<Node> dependencies = new ArrayList<>();
-            Map<Dependency, Path> artifacts = new LinkedHashMap<>();
-            List<Path> paths = new ArrayList<>();
-            for (org.eclipse.aether.graph.Dependency dep : 
result.getResolvedDependencies()) {
-                dependencies.add(session.getNode(nodes.get(dep)));
-                Path path = dep.getArtifact().getFile().toPath();
-                artifacts.put(session.getDependency(dep), path);
-                paths.add(path);
-            }
-            return new DefaultDependencyResolverResult(
-                    result.getCollectionErrors(), root, dependencies, paths, 
artifacts);
-        }
+        nonNull(request, "request");
+        Session session = InternalSession.from(request.getSession());
 
         DependencyCollectorResult collectorResult =
                 session.getService(DependencyCollector.class).collect(request);
diff --git 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java
index e2f59668ec..35162d8471 100644
--- 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java
+++ 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java
@@ -182,7 +182,8 @@ public class DefaultProject implements Project {
             @Nonnull
             @Override
             public DependencyScope getScope() {
-                return session.requireDependencyScope(dependency.getScope());
+                String scope = dependency.getScope() != null ? 
dependency.getScope() : "";
+                return session.requireDependencyScope(scope);
             }
 
             @Override
diff --git 
a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
 
b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
index ca9b80db45..a10a356c23 100644
--- 
a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
+++ 
b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
@@ -33,6 +33,7 @@ import java.util.zip.ZipEntry;
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.api.Project;
 import org.apache.maven.api.Session;
+import org.apache.maven.api.services.ProjectManager;
 import org.apache.maven.api.xml.XmlNode;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.classrealm.ClassRealmManager;
@@ -523,6 +524,11 @@ public class DefaultMavenPluginManager implements 
MavenPluginManager {
 
         InternalSession sessionV4 = InternalSession.from(session.getSession());
         Project project = sessionV4.getProject(session.getCurrentProject());
+
+        List<org.apache.maven.api.RemoteRepository> repos =
+                
sessionV4.getService(ProjectManager.class).getRemoteProjectRepositories(project);
+        sessionV4 = 
InternalSession.from(sessionV4.withRemoteRepositories(repos));
+
         org.apache.maven.api.MojoExecution execution = new 
DefaultMojoExecution(sessionV4, mojoExecution);
         org.apache.maven.api.plugin.Log log = new DefaultLog(
                 
LoggerFactory.getLogger(mojoExecution.getMojoDescriptor().getFullGoalName()));

Reply via email to