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() );