Author: hboutemy Date: Sat Oct 13 22:51:30 2012 New Revision: 1397965 URL: http://svn.apache.org/viewvc?rev=1397965&view=rev Log: [MPIR-255] check if version is a range before retrieving metadata from repository
Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/it/full-pom/pom.xml maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/renderer/DependencyManagementRenderer.java Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/it/full-pom/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-project-info-reports-plugin/src/it/full-pom/pom.xml?rev=1397965&r1=1397964&r2=1397965&view=diff ============================================================================== --- maven/plugins/trunk/maven-project-info-reports-plugin/src/it/full-pom/pom.xml (original) +++ maven/plugins/trunk/maven-project-info-reports-plugin/src/it/full-pom/pom.xml Sat Oct 13 22:51:30 2012 @@ -140,13 +140,17 @@ <artifactId>doxia-sink-api</artifactId> <version>[1.0,)</version> </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-artifact</artifactId> + <version>2.1.0</version> + </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-artifact</artifactId> - <version>2.1.0</version> </dependency> <dependency> <groupId>org.apache.maven.doxia</groupId> Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/renderer/DependencyManagementRenderer.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/renderer/DependencyManagementRenderer.java?rev=1397965&r1=1397964&r2=1397965&view=diff ============================================================================== --- maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/renderer/DependencyManagementRenderer.java (original) +++ maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/renderer/DependencyManagementRenderer.java Sat Oct 13 22:51:30 2012 @@ -21,6 +21,7 @@ package org.apache.maven.report.projecti import java.util.Collections; import java.util.Comparator; +import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; @@ -31,6 +32,8 @@ import org.apache.maven.artifact.metadat import org.apache.maven.artifact.metadata.ArtifactMetadataSource; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.versioning.ArtifactVersion; +import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; +import org.apache.maven.artifact.versioning.VersionRange; import org.apache.maven.doxia.sink.Sink; import org.apache.maven.model.Dependency; import org.apache.maven.model.License; @@ -220,14 +223,33 @@ public class DependencyManagementRendere String url = null; try { - List<ArtifactVersion> versions = - artifactMetadataSource.retrieveAvailableVersions( artifact, localRepository, remoteRepositories ); + VersionRange range = VersionRange.createFromVersionSpec( dependency.getVersion() ); - if ( versions.size() > 0 ) + if ( range.getRecommendedVersion() == null ) { - Collections.sort( versions ); - - artifact.setVersion( versions.get( versions.size() - 1 ).toString() ); + // MPIR-216: no direct version but version range: need to choose one precise version + log.debug( "Resolving range for DependencyManagement on " + artifact.getId() ); + + List<ArtifactVersion> versions = + artifactMetadataSource.retrieveAvailableVersions( artifact, localRepository, remoteRepositories ); + + // only use versions from range + for ( Iterator<ArtifactVersion> iter = versions.iterator(); iter.hasNext(); ) + { + if ( ! range.containsVersion( iter.next() ) ) + { + iter.remove(); + } + } + + // select latest, assuming pom information will be the most accurate + if ( versions.size() > 0 ) + { + Collections.sort( versions ); + + artifact.setVersion( versions.get( versions.size() - 1 ).toString() ); + log.debug( "DependencyManagement resolved: " + artifact.getId() ); + } } url = @@ -247,6 +269,10 @@ public class DependencyManagementRendere licensesBuffer.append( licenseCell ); } } + catch ( InvalidVersionSpecificationException e ) + { + log.warn( "Unable to parse version for " + artifact.getId(), e ); + } catch ( ArtifactMetadataRetrievalException e ) { log.warn( "Unable to retrieve versions for " + artifact.getId() + " from repository.", e );