You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2023/02/05 12:45:52 UTC

[maven] branch maven-3.8.x updated: [MNG-7544] MavenMetadataSource#retrieve(MetadataResolutionRequest) does not check for null when reading from project map

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

michaelo pushed a commit to branch maven-3.8.x
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/maven-3.8.x by this push:
     new c91447929 [MNG-7544] MavenMetadataSource#retrieve(MetadataResolutionRequest) does not check for null when reading from project map
c91447929 is described below

commit c91447929b282fcb5346f13aeba8e783ac514e22
Author: Christoph Läubrich <ch...@laeubi-soft.de>
AuthorDate: Sun Feb 5 08:35:15 2023 +0100

    [MNG-7544] MavenMetadataSource#retrieve(MetadataResolutionRequest) does not check for null when reading from project map
    
    Currently, if a project is returned from the workspace reader, but is not part
    of the reactor, a NPE occurs. In this case, the repositories are read from
    the model instead.
    
    This closes #980
---
 .../project/artifact/MavenMetadataSource.java      | 56 +++++++++++++++++++---
 1 file changed, 49 insertions(+), 7 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
index 7de55e972..124e8b8fe 100644
--- a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
+++ b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
@@ -35,6 +35,7 @@ import java.util.Set;
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.artifact.InvalidRepositoryException;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
@@ -54,12 +55,14 @@ import org.apache.maven.artifact.versioning.ArtifactVersion;
 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.bridge.MavenRepositorySystem;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.DistributionManagement;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Relocation;
+import org.apache.maven.model.Repository;
 import org.apache.maven.model.building.ModelBuildingException;
 import org.apache.maven.model.building.ModelBuildingRequest;
 import org.apache.maven.model.building.ModelProblem;
@@ -96,7 +99,10 @@ public class MavenMetadataSource
     private RepositoryMetadataManager repositoryMetadataManager;
 
     @Requirement
-    private ArtifactFactory repositorySystem;
+    private ArtifactFactory artifactFactory;
+
+    @Requirement
+    private MavenRepositorySystem repositorySystem;
 
     //TODO This prevents a cycle in the composition which shows us another problem we need to deal with.
     //@Requirement
@@ -125,6 +131,7 @@ public class MavenMetadataSource
         }
     }
 
+    @Override
     public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository,
                                      List<ArtifactRepository> remoteRepositories )
         throws ArtifactMetadataRetrievalException
@@ -145,6 +152,7 @@ public class MavenMetadataSource
         return retrieve( request );
     }
 
+    @Override
     public ResolutionGroup retrieve( MetadataResolutionRequest request )
         throws ArtifactMetadataRetrievalException
     {
@@ -181,7 +189,8 @@ public class MavenMetadataSource
         Artifact relocatedArtifact = null;
 
         // TODO hack: don't rebuild model if it was already loaded during reactor resolution
-        final WorkspaceReader workspace = legacySupport.getRepositorySession().getWorkspaceReader();
+        RepositorySystemSession repositorySession = legacySupport.getRepositorySession();
+        final WorkspaceReader workspace = repositorySession.getWorkspaceReader();
         Model model = null;
         if ( workspace instanceof MavenWorkspaceReader )
         {
@@ -195,9 +204,19 @@ public class MavenMetadataSource
             DependencyManagement dependencyManagement = model.getDependencyManagement();
             managedDependencies = dependencyManagement == null ? null : dependencyManagement.getDependencies();
             MavenSession session = legacySupport.getSession();
-            MavenProject project = session.getProjectMap().get(
-                ArtifactUtils.key( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() ) );
-            pomRepositories = project.getRemoteArtifactRepositories();
+            Map<String, MavenProject> projectMap = session.getProjectMap();
+            MavenProject project = projectMap == null ? null
+                            : projectMap.get( ArtifactUtils.key( artifact.getGroupId(), artifact.getArtifactId(),
+                                                                 artifact.getVersion() ) );
+            if ( project == null )
+            {
+                // if the project is not on the project map, read the repositories from the model itself!
+                pomRepositories = getRepositoriesFromModel( repositorySession, model );
+            }
+            else
+            {
+                pomRepositories = project.getRemoteArtifactRepositories();
+            }
         }
         else if ( artifact instanceof ArtifactWithDependencies )
         {
@@ -280,6 +299,26 @@ public class MavenMetadataSource
         return result;
     }
 
+    private List<ArtifactRepository> getRepositoriesFromModel( RepositorySystemSession repositorySession, Model model )
+    {
+        List<ArtifactRepository> pomRepositories = new ArrayList<>();
+        for ( Repository modelRepository : model.getRepositories() )
+        {
+            try
+            {
+                pomRepositories.add( MavenRepositorySystem.buildArtifactRepository( modelRepository ) );
+            }
+            catch ( InvalidRepositoryException e )
+            {
+                // can not use this then
+            }
+        }
+        repositorySystem.injectMirror( repositorySession, pomRepositories );
+        repositorySystem.injectProxy( repositorySession, pomRepositories );
+        repositorySystem.injectAuthentication( repositorySession, pomRepositories );
+        return pomRepositories;
+    }
+
     private boolean hasFile( Artifact artifact )
     {
         return artifact != null && artifact.getFile() != null && artifact.getFile().exists();
@@ -325,7 +364,7 @@ public class MavenMetadataSource
 
             ArtifactFilter inheritedFilter = ( owner != null ) ? owner.getDependencyFilter() : null;
 
-            return createDependencyArtifact( repositorySystem, dependency, inheritedScope, inheritedFilter );
+            return createDependencyArtifact( artifactFactory, dependency, inheritedScope, inheritedFilter );
         }
         catch ( InvalidVersionSpecificationException e )
         {
@@ -427,6 +466,7 @@ public class MavenMetadataSource
         return effectiveFilter;
     }
 
+    @Override
     public List<ArtifactVersion> retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository,
                                                             List<ArtifactRepository> remoteRepositories )
         throws ArtifactMetadataRetrievalException
@@ -439,6 +479,7 @@ public class MavenMetadataSource
         return retrieveAvailableVersions( request );
     }
 
+    @Override
     public List<ArtifactVersion> retrieveAvailableVersions( MetadataResolutionRequest request )
         throws ArtifactMetadataRetrievalException
     {
@@ -458,6 +499,7 @@ public class MavenMetadataSource
         return retrieveAvailableVersionsFromMetadata( metadata.getMetadata(), availableVersions );
     }
 
+    @Override
     public List<ArtifactVersion> retrieveAvailableVersionsFromDeploymentRepository( Artifact artifact,
                                                                                     ArtifactRepository localRepository,
                                                                               ArtifactRepository deploymentRepository )
@@ -563,7 +605,7 @@ public class MavenMetadataSource
             project = null;
 
             pomArtifact =
-                repositorySystem.createProjectArtifact( artifact.getGroupId(),
+                artifactFactory.createProjectArtifact( artifact.getGroupId(),
                                                         artifact.getArtifactId(),
                                                         artifact.getVersion(), artifact.getScope() );