You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/08/24 12:14:21 UTC
svn commit: r807140 -
/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
Author: bentmann
Date: Mon Aug 24 10:14:21 2009
New Revision: 807140
URL: http://svn.apache.org/viewvc?rev=807140&view=rev
Log:
[MNG-4317] [regression] g:a level metadata is not properly processed when resolving plugin version
Modified:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java?rev=807140&r1=807139&r2=807140&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java Mon Aug 24 10:14:21 2009
@@ -64,32 +64,24 @@
{
DefaultPluginVersionResult result = new DefaultPluginVersionResult();
- Throwable error = null;
+ Metadata mergedMetadata = new Metadata();
ArtifactRepository localRepository = request.getLocalRepository();
- File artifactMetadataFile = null;
-
- String localPath;
-
// Search in remote repositories for a (released) version.
//
// maven-metadata-{central|nexus|...}.xml
//
- // TODO: we should cycle through the repositories but take the repository which actually
- // satisfied the prefix.
+ // TODO: we should cycle through the repositories but take the repository which actually satisfied the prefix.
for ( ArtifactRepository repository : request.getRemoteRepositories() )
{
- localPath =
- request.getGroupId().replace( '.', '/' ) + "/" + request.getArtifactId() + "/maven-metadata-"
- + repository.getId() + ".xml";
+ String localPath = getLocalMetadataPath( request, repository );
- artifactMetadataFile = new File( localRepository.getBasedir(), localPath );
+ File artifactMetadataFile = new File( localRepository.getBasedir(), localPath );
- if ( !request.isOffline() && !artifactMetadataFile.exists() /* || user requests snapshot updates */)
+ if ( !request.isOffline() && ( !artifactMetadataFile.exists() /* || user requests snapshot updates */) )
{
- String remotePath =
- request.getGroupId().replace( '.', '/' ) + "/" + request.getArtifactId() + "/maven-metadata.xml";
+ String remotePath = getRemoteMetadataPath( request, repository );
try
{
@@ -97,8 +89,6 @@
}
catch ( TransferFailedException e )
{
- error = e;
-
if ( logger.isDebugEnabled() )
{
logger.warn( "Failed to retrieve " + remotePath + ": " + e.getMessage(), e );
@@ -116,64 +106,44 @@
}
}
- result.setRepository( repository );
-
- break;
+ if ( mergeMetadata( mergedMetadata, artifactMetadataFile ) )
+ {
+ result.setRepository( repository );
+ }
}
// Search in the local repositiory for a (development) version
//
// maven-metadata-local.xml
//
- if ( artifactMetadataFile == null || !artifactMetadataFile.exists() )
{
- localPath =
- request.getGroupId().replace( '.', '/' ) + "/" + request.getArtifactId() + "/maven-metadata-"
- + localRepository.getId() + ".xml";
+ String localPath = getLocalMetadataPath( request, localRepository );
- artifactMetadataFile = new File( localRepository.getBasedir(), localPath );
+ File artifactMetadataFile = new File( localRepository.getBasedir(), localPath );
- result.setRepository( localRepository );
+ if ( mergeMetadata( mergedMetadata, artifactMetadataFile ) )
+ {
+ result.setRepository( localRepository );
+ }
}
- if ( artifactMetadataFile.exists() )
+ if ( mergedMetadata.getVersioning() != null )
{
- logger.debug( "Extracting version for plugin " + request.getGroupId() + ':' + request.getArtifactId()
- + " from " + artifactMetadataFile );
+ String release = mergedMetadata.getVersioning().getRelease();
- try
+ if ( StringUtils.isNotEmpty( release ) )
+ {
+ result.setVersion( release );
+ }
+ else
{
- Metadata pluginMetadata = readMetadata( artifactMetadataFile );
+ String latest = mergedMetadata.getVersioning().getLatest();
- if ( pluginMetadata.getVersioning() != null )
+ if ( StringUtils.isNotEmpty( latest ) )
{
- String release = pluginMetadata.getVersioning().getRelease();
-
- if ( StringUtils.isNotEmpty( release ) )
- {
- result.setVersion( release );
- }
- else
- {
- String latest = pluginMetadata.getVersioning().getLatest();
-
- if ( StringUtils.isNotEmpty( latest ) )
- {
- result.setVersion( latest );
- }
- }
+ result.setVersion( latest );
}
}
- catch ( RepositoryMetadataReadException e )
- {
- throw new PluginVersionResolutionException( request.getGroupId(), request.getArtifactId(),
- e.getMessage(), e );
- }
- }
- else if ( error != null )
- {
- throw new PluginVersionResolutionException( request.getGroupId(), request.getArtifactId(),
- error.getMessage(), error );
}
if ( StringUtils.isEmpty( result.getVersion() ) )
@@ -185,6 +155,48 @@
return result;
}
+ private String getLocalMetadataPath( PluginVersionRequest request, ArtifactRepository repository )
+ {
+ return request.getGroupId().replace( '.', '/' ) + '/' + request.getArtifactId() + "/maven-metadata-"
+ + repository.getId() + ".xml";
+ }
+
+ private String getRemoteMetadataPath( PluginVersionRequest request, ArtifactRepository repository )
+ {
+ return request.getGroupId().replace( '.', '/' ) + '/' + request.getArtifactId() + "/maven-metadata.xml";
+ }
+
+ private boolean mergeMetadata( Metadata target, File metadataFile )
+ {
+ if ( metadataFile.isFile() )
+ {
+ try
+ {
+ Metadata repoMetadata = readMetadata( metadataFile );
+
+ return mergeMetadata( target, repoMetadata );
+ }
+ catch ( RepositoryMetadataReadException e )
+ {
+ if ( logger.isDebugEnabled() )
+ {
+ logger.warn( "Failed to read metadata " + metadataFile + ": " + e.getMessage(), e );
+ }
+ else
+ {
+ logger.warn( "Failed to read metadata " + metadataFile + ": " + e.getMessage() );
+ }
+ }
+ }
+
+ return false;
+ }
+
+ private boolean mergeMetadata( Metadata target, Metadata source )
+ {
+ return target.merge( source );
+ }
+
private Metadata readMetadata( File mappingFile )
throws RepositoryMetadataReadException
{