Author: jdcasey
Date: Wed Jul 9 14:44:10 2008
New Revision: 675352
URL: http://svn.apache.org/viewvc?rev=675352&view=rev
Log:
[MNG-3380] Process relocations before attempting to resolve child nodes during
artifact collection.
Modified:
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java
Modified:
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java?rev=675352&r1=675351&r2=675352&view=diff
==============================================================================
---
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
(original)
+++
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
Wed Jul 9 14:44:10 2008
@@ -89,16 +89,59 @@
private boolean strictlyEnforceThePresenceOfAValidMavenPOM = false;
/**
- * Retrieve the metadata for the project from the repository.
- * Uses the ProjectBuilder, to enable post-processing and inheritance
calculation before retrieving the
- * associated artifacts.
+ * Resolve all relocations in the POM for this artifact, and return the
new artifact coordinate.
*/
- public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository
localRepository, List remoteRepositories )
+ public Artifact retrieveRelocatedArtifact( Artifact artifact,
+ ArtifactRepository
localRepository,
+ List<ArtifactRepository>
remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ if ( artifact instanceof ActiveProjectArtifact )
+ {
+ return artifact;
+ }
+
+ ProjectRelocation res = retrieveRelocatedProject( artifact,
localRepository, remoteRepositories );
+ MavenProject project = res.project;
+
+ if ( project == null || getRelocationKey( artifact ).equals(
getRelocationKey( project.getArtifact() ) ) )
+ {
+ return artifact;
+ }
+
+ Artifact result = null;
+ if ( artifact.getClassifier() != null )
+ {
+ result = artifactFactory.createArtifactWithClassifier(
project.getGroupId(), project.getArtifactId(), project.getVersion(),
artifact.getType(), artifact.getClassifier() );
+ }
+ else
+ {
+ result = artifactFactory.createArtifact( project.getGroupId(),
project.getArtifactId(), project.getVersion(), artifact.getScope(),
artifact.getType() );
+ }
+
+ result.setScope( artifact.getScope() );
+ result.setArtifactHandler( artifact.getArtifactHandler() );
+ result.setDependencyFilter( artifact.getDependencyFilter() );
+ result.setDependencyTrail( artifact.getDependencyTrail() );
+ result.setOptional( artifact.isOptional() );
+ result.setRelease( artifact.isRelease() );
+
+ return result;
+ }
+
+ private String getRelocationKey( Artifact artifact )
+ {
+ return artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" +
artifact.getVersion();
+ }
+
+ private ProjectRelocation retrieveRelocatedProject( Artifact artifact,
+ ArtifactRepository
localRepository,
+ List<ArtifactRepository>
remoteRepositories )
throws ArtifactMetadataRetrievalException
{
if ( remoteRepositories == null )
{
- remoteRepositories = Collections.EMPTY_LIST;
+ remoteRepositories = Collections.emptyList();
}
try
@@ -111,7 +154,6 @@
}
MavenProject project = null;
-
Artifact pomArtifact;
boolean done = false;
@@ -181,14 +223,17 @@
if ( relocation.getGroupId() != null )
{
artifact.setGroupId( relocation.getGroupId() );
+ project.setGroupId( relocation.getGroupId() );
}
if ( relocation.getArtifactId() != null )
{
artifact.setArtifactId( relocation.getArtifactId()
);
+ project.setArtifactId( relocation.getArtifactId()
);
}
if ( relocation.getVersion() != null )
{
artifact.setVersionRange(
VersionRange.createFromVersion( relocation.getVersion() ) );
+ project.setVersion( relocation.getVersion() );
}
if ( ( artifact.getDependencyFilter() != null ) &&
@@ -239,6 +284,25 @@
}
while ( !done );
+ ProjectRelocation res = new ProjectRelocation();
+ res.project = project;
+ res.pomArtifact = pomArtifact;
+
+ return res;
+ }
+
+ /**
+ * Retrieve the metadata for the project from the repository.
+ * Uses the ProjectBuilder, to enable post-processing and inheritance
calculation before retrieving the
+ * associated artifacts.
+ */
+ public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository
localRepository, List remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ ProjectRelocation res = retrieveRelocatedProject( artifact,
localRepository, remoteRepositories );
+ MavenProject project = res.project;
+ Artifact pomArtifact = res.pomArtifact;
+
// last ditch effort to try to get this set...
if ( artifact.getDownloadUrl() == null )
{
@@ -511,4 +575,11 @@
{
container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY
);
}
+
+ private static final class ProjectRelocation
+ {
+ private MavenProject project;
+ private Artifact pomArtifact;
+ }
+
}
Modified:
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java?rev=675352&r1=675351&r2=675352&view=diff
==============================================================================
---
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java
(original)
+++
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java
Wed Jul 9 14:44:10 2008
@@ -189,6 +189,14 @@
return projectArtifacts;
}
+
+ public Artifact retrieveRelocatedArtifact( Artifact artifact,
+ ArtifactRepository
localRepository,
+ List<ArtifactRepository>
remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ return artifact;
+ }
}
public Source source()
@@ -199,12 +207,14 @@
/**
* @noinspection RefusedBequest
*/
+ @Override
public void resolve( Artifact artifact, List remoteRepositories,
ArtifactRepository localRepository )
throws ArtifactResolutionException
{
artifact.setFile( new File( "dummy" ) );
}
+ @Override
public ArtifactResolutionResult resolveTransitively( Set artifacts,
Artifact originatingArtifact,
ArtifactRepository
localRepository, List remoteRepositories,
ArtifactMetadataSource source, ArtifactFilter filter )
@@ -214,6 +224,7 @@
new Source( artifactFactory,
repositoryFactory, container ), filter );
}
+ @Override
public ArtifactResolutionResult resolveTransitively( Set artifacts,
Artifact originatingArtifact,
List
remoteRepositories, ArtifactRepository localRepository,
ArtifactMetadataSource source )
@@ -226,7 +237,7 @@
public void contextualize( Context context )
throws ContextException
{
- this.container = (PlexusContainer) context.get(
PlexusConstants.PLEXUS_KEY );
+ container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY
);
}
}
\ No newline at end of file