You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2020/01/19 20:57:41 UTC

[maven-surefire] branch resolver created (now 041fe00)

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

tibordigana pushed a change to branch resolver
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git.


      at 041fe00  dependencies for dynamic provider contain Maven artifacts from the MOJO plugin

This branch includes the following new commits:

     new 041fe00  dependencies for dynamic provider contain Maven artifacts from the MOJO plugin

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven-surefire] 01/01: dependencies for dynamic provider contain Maven artifacts from the MOJO plugin

Posted by ti...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch resolver
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit 041fe0056f8b9619b02143c5fdc7186fe53bafd1
Author: tibordigana <ti...@apache.org>
AuthorDate: Sun Jan 19 21:57:29 2020 +0100

    dependencies for dynamic provider contain Maven artifacts from the MOJO plugin
---
 .../plugin/surefire/AbstractSurefireMojo.java      |  3 +-
 .../surefire/SurefireDependencyResolver.java       | 92 ++++++++++++++--------
 pom.xml                                            | 12 +++
 3 files changed, 73 insertions(+), 34 deletions(-)

diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
index 7604c03..ed751cf 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
@@ -3222,8 +3222,7 @@ public abstract class AbstractSurefireMojo
         @Nonnull
         public Set<Artifact> getProviderClasspath()
         {
-            return surefireDependencyResolver.addProviderToClasspath( getPluginArtifactMap(), getMojoArtifact(),
-                    getApiArtifact(), getLoggerApiArtifact() );
+            return surefireDependencyResolver.resolveProvider( getPluginDescriptor() );
         }
     }
 
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
index 16cb6c8..de5ee47 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
@@ -37,6 +37,7 @@ import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.repository.RepositorySystem;
@@ -156,26 +157,64 @@ final class SurefireDependencyResolver
 
     ArtifactResolutionResult resolvePluginArtifact( Artifact artifact )
     {
-        return resolveArtifact( artifact, pluginRemoteRepositories );
+        return resolvePluginArtifact( artifact, new RuntimeArtifactFilter() );
     }
 
     ArtifactResolutionResult resolveProjectArtifact( Artifact artifact )
     {
-        return resolveArtifact( artifact, projectRemoteRepositories );
+        return resolveProjectArtifact( artifact, new RuntimeArtifactFilter() );
     }
 
-    private ArtifactResolutionResult resolveArtifact( Artifact artifact, List<ArtifactRepository> repositories )
+    private ArtifactResolutionResult resolvePluginArtifact( Artifact artifact, ArtifactFilter filter )
+    {
+        return resolveArtifact( artifact, pluginRemoteRepositories, filter );
+    }
+
+    private ArtifactResolutionResult resolveProjectArtifact( Artifact artifact, ArtifactFilter filter )
+    {
+        return resolveArtifact( artifact, projectRemoteRepositories, filter );
+    }
+
+    private ArtifactResolutionResult resolveArtifact( Artifact artifact, List<ArtifactRepository> repositories,
+                                                      ArtifactFilter filter )
     {
         ArtifactResolutionRequest request = new ArtifactResolutionRequest()
+                //.setOffline(  )
+                // .setForceUpdate(  )
+                // set mirrors, proxies, servers - see MavenSession.Settings
                 .setArtifact( artifact )
                 .setLocalRepository( localRepository )
                 .setResolveTransitively( true )
-                .setCollectionFilter( new RuntimeArtifactFilter() )
+                .setCollectionFilter( filter )
                 .setRemoteRepositories( repositories );
 
         return repositorySystem.resolve( request );
     }
 
+    private Set<Artifact> toPluginDependenciesAsArtifacts( Collection<Dependency> dependencies )
+    {
+        Set<Artifact> artifacts = new LinkedHashSet<>();
+        for ( Dependency dependency : dependencies )
+        {
+            Artifact artifact = repositorySystem.createDependencyArtifact( dependency );
+            // LegacyRepositorySystem do not resolve the artifact file
+            if ( artifact.getFile() == null )
+            {
+                ArtifactFilter filter = new RuntimeArtifactFilter( artifact );
+                Iterator<Artifact> it = resolvePluginArtifact( artifact, filter ).getArtifacts().iterator();
+                if ( it.hasNext() )
+                {
+                    artifacts.add( it.next() );
+                }
+            }
+            else
+            {
+                artifacts.add( artifact );
+            }
+        }
+        return artifacts;
+    }
+
     @Nonnull
     Set<Artifact> getProviderClasspath( String providerArtifactId, String providerVersion )
     {
@@ -204,34 +243,10 @@ final class SurefireDependencyResolver
         return artifactMapByVersionlessId( getProviderClasspath( providerArtifactId, providerVersion ) );
     }
 
-    Set<Artifact> addProviderToClasspath( Map<String, Artifact> pluginArtifactMap, Artifact mojoPluginArtifact,
-                                          Artifact surefireApi, Artifact surefireLoggerApi )
+    Set<Artifact> resolveProvider( PluginDescriptor pluginDescriptor )
     {
-        Set<Artifact> providerArtifacts = new LinkedHashSet<>();
-        ArtifactResolutionResult artifactResolutionResult = resolvePluginArtifact( mojoPluginArtifact );
-        for ( Artifact artifact : pluginArtifactMap.values() )
-        {
-            if ( !artifactResolutionResult.getArtifacts().contains( artifact ) )
-            {
-                providerArtifacts.add( artifact );
-                for ( Artifact dependency : resolvePluginArtifact( artifact ).getArtifacts() )
-                {
-                    String groupId = dependency.getGroupId();
-                    String artifactId = dependency.getArtifactId();
-                    if ( groupId.equals( surefireApi.getGroupId() )
-                            && artifactId.equals( surefireApi.getArtifactId() ) )
-                    {
-                        providerArtifacts.add( surefireApi );
-                    }
-                    else if ( groupId.equals( surefireLoggerApi.getGroupId() )
-                            && artifactId.equals( surefireLoggerApi.getArtifactId() ) )
-                    {
-                        providerArtifacts.add( surefireLoggerApi );
-                    }
-                }
-            }
-        }
-        return orderProviderArtifacts( providerArtifacts );
+        Collection<Dependency> dependencies = pluginDescriptor.getPlugin().getDependencies();
+        return toPluginDependenciesAsArtifacts( dependencies );
     }
 
     private static Set<Artifact> orderProviderArtifacts( Set<Artifact> providerArtifacts )
@@ -269,11 +284,24 @@ final class SurefireDependencyResolver
         private static final Collection<String> SCOPES =
                 asList( SCOPE_COMPILE, SCOPE_COMPILE_PLUS_RUNTIME, SCOPE_RUNTIME );
 
+        private final Artifact filter;
+
+        RuntimeArtifactFilter()
+        {
+            this( null );
+        }
+
+        RuntimeArtifactFilter( Artifact filter )
+        {
+            this.filter = filter;
+        }
+
         @Override
         public boolean include( Artifact artifact )
         {
             String scope = artifact.getScope();
-            return !artifact.isOptional() && ( scope == null || SCOPES.contains( scope ) );
+            return ( filter == null || artifact.equals( filter ) )
+                && !artifact.isOptional() && ( scope == null || SCOPES.contains( scope ) );
         }
     }
 }
diff --git a/pom.xml b/pom.xml
index 0f6d440..e6a2838 100644
--- a/pom.xml
+++ b/pom.xml
@@ -225,6 +225,18 @@
             <groupId>org.apache.maven.shared</groupId>
             <artifactId>maven-shared-utils</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-plugin-api</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.apache.maven</groupId>
+             <artifactId>maven-model</artifactId>
+          </exclusion>
+          <exclusion>
+             <groupId>org.sonatype.sisu</groupId>
+             <artifactId>sisu-inject-plexus</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
       <dependency>