You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by vs...@apache.org on 2008/07/11 15:08:29 UTC
svn commit: r675941 - in
/maven/plugins/trunk/maven-project-info-reports-plugin: ./
src/main/java/org/apache/maven/report/projectinfo/
src/main/java/org/apache/maven/report/projectinfo/dependencies/
src/main/java/org/apache/maven/report/projectinfo/dep...
Author: vsiveton
Date: Fri Jul 11 06:08:28 2008
New Revision: 675941
URL: http://svn.apache.org/viewvc?rev=675941&view=rev
Log:
MPIR-119: Dependency Repository Locations in Dependency Report doesn't allow snapshot artifacts url from the snapshot repositories
o added repositoryMetadataManager component to get repo metadata
o make DependenciesReport implements Contextualizable to get PlexusContainer and to disable some un-useful INFO logs when resolving metadata
o improved RepositoryUtils constructor
o added RepositoryUtils#getDependencyUrlFromRepository()
Modified:
maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/RepositoryUtils.java
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/renderer/DependenciesRenderer.java
Modified: maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml?rev=675941&r1=675940&r2=675941&view=diff
==============================================================================
--- maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml Fri Jul 11 06:08:28 2008
@@ -128,7 +128,6 @@
<groupId>org.apache.maven</groupId>
<artifactId>maven-repository-metadata</artifactId>
<version>2.0.4</version>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java?rev=675941&r1=675940&r2=675941&view=diff
==============================================================================
--- maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java (original)
+++ maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java Fri Jul 11 06:08:28 2008
@@ -22,6 +22,7 @@
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.manager.WagonManager;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
import org.apache.maven.artifact.resolver.ArtifactCollector;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
@@ -35,6 +36,11 @@
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
import org.apache.maven.shared.jar.classes.JarClassesAnalysis;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
import org.codehaus.plexus.util.IOUtil;
import java.io.File;
@@ -58,6 +64,7 @@
*/
public class DependenciesReport
extends AbstractProjectInfoReport
+ implements Contextualizable
{
/** Images resources dir */
private static final String RESOURCES_DIR = "org/apache/maven/report/projectinfo/resources";
@@ -104,13 +111,21 @@
private DependencyTreeBuilder dependencyTreeBuilder;
/**
- * Jar classes analyser component.
+ * Jar classes analyzer component.
*
* @since 2.1
* @component
*/
private JarClassesAnalysis classesAnalyzer;
+ /**
+ * Repository metadata component.
+ *
+ * @since 2.1
+ * @component
+ */
+ private RepositoryMetadataManager repositoryMetadataManager;
+
// ----------------------------------------------------------------------
// Mojo parameters
// ----------------------------------------------------------------------
@@ -150,6 +165,13 @@
*/
private List remoteRepositories;
+ /**
+ * Plexus container to play with logger manager.
+ *
+ * @since 2.1
+ */
+ private PlexusContainer container;
+
// ----------------------------------------------------------------------
// Public methods
// ----------------------------------------------------------------------
@@ -178,9 +200,11 @@
getLog().error( "Cannot copy ressources", e );
}
- RepositoryUtils repoUtils = new RepositoryUtils( wagonManager, settings, mavenProjectBuilder, factory, resolver,
- project.getRemoteArtifactRepositories(),
- project.getPluginArtifactRepositories(), localRepository );
+ RepositoryUtils repoUtils = new RepositoryUtils( getLog(), container.getLoggerManager(), wagonManager,
+ settings, mavenProjectBuilder, factory, resolver, project
+ .getRemoteArtifactRepositories(), project
+ .getPluginArtifactRepositories(), localRepository,
+ repositoryMetadataManager );
DependencyNode dependencyTreeNode = resolveProject();
@@ -192,8 +216,6 @@
DependenciesRenderer r = new DependenciesRenderer( getSink(), locale, i18n, dependencies, dependencyTreeNode,
config, repoUtils, mavenProjectBuilder, remoteRepositories,
localRepository );
-
- repoUtils.setLog( getLog() );
r.setLog( getLog() );
r.render();
}
@@ -204,6 +226,13 @@
return "dependencies";
}
+ /** {@inheritDoc} */
+ public void contextualize( Context context )
+ throws ContextException
+ {
+ this.container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+ }
+
// ----------------------------------------------------------------------
// Private methods
// ----------------------------------------------------------------------
Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/RepositoryUtils.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/RepositoryUtils.java?rev=675941&r1=675940&r2=675941&view=diff
==============================================================================
--- maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/RepositoryUtils.java (original)
+++ maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/RepositoryUtils.java Fri Jul 11 06:08:28 2008
@@ -20,10 +20,15 @@
*/
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.manager.WagonConfigurationException;
import org.apache.maven.artifact.manager.WagonManager;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataResolutionException;
+import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolver;
@@ -43,8 +48,12 @@
import org.apache.maven.wagon.observers.Debug;
import org.apache.maven.wagon.proxy.ProxyInfo;
import org.apache.maven.wagon.repository.Repository;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.logging.LoggerManager;
+import org.codehaus.plexus.util.StringUtils;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
/**
@@ -53,25 +62,31 @@
*/
public class RepositoryUtils
{
- private Log log;
+ private final Log log;
- private WagonManager wagonManager;
+ private final LoggerManager loggerManager;
- private Settings settings;
+ private final WagonManager wagonManager;
- private MavenProjectBuilder mavenProjectBuilder;
+ private final Settings settings;
- private ArtifactFactory factory;
+ private final MavenProjectBuilder mavenProjectBuilder;
- private List remoteRepositories;
+ private final ArtifactFactory factory;
- private List pluginRepositories;
+ private final List remoteRepositories;
- private ArtifactResolver resolver;
+ private final List pluginRepositories;
- private ArtifactRepository localRepository;
+ private final ArtifactResolver resolver;
+
+ private final ArtifactRepository localRepository;
+
+ private final RepositoryMetadataManager repositoryMetadataManager;
/**
+ * @param log
+ * @param loggerManager
* @param wagonManager
* @param settings
* @param mavenProjectBuilder
@@ -80,11 +95,14 @@
* @param remoteRepositories
* @param pluginRepositories
* @param localRepository
+ * @param repositoryMetadataManager
*/
- public RepositoryUtils( WagonManager wagonManager, Settings settings, MavenProjectBuilder mavenProjectBuilder,
+ public RepositoryUtils( Log log, LoggerManager loggerManager, WagonManager wagonManager, Settings settings, MavenProjectBuilder mavenProjectBuilder,
ArtifactFactory factory, ArtifactResolver resolver, List remoteRepositories,
- List pluginRepositories, ArtifactRepository localRepository )
+ List pluginRepositories, ArtifactRepository localRepository, RepositoryMetadataManager repositoryMetadataManager )
{
+ this.log = log;
+ this.loggerManager = loggerManager;
this.wagonManager = wagonManager;
this.settings = settings;
this.mavenProjectBuilder = mavenProjectBuilder;
@@ -93,11 +111,7 @@
this.remoteRepositories = remoteRepositories;
this.pluginRepositories = pluginRepositories;
this.localRepository = localRepository;
- }
-
- public void setLog( Log log )
- {
- this.log = log;
+ this.repositoryMetadataManager = repositoryMetadataManager;
}
public ArtifactRepository getLocalRepository()
@@ -128,7 +142,7 @@
repos.addAll( pluginRepositories );
repos.addAll( remoteRepositories );
- resolver.resolve( artifact, repos, localRepository );
+ resolver.resolveAlways( artifact, repos, localRepository );
}
/**
@@ -138,24 +152,19 @@
*/
public boolean dependencyExistsInRepo( ArtifactRepository repo, Artifact artifact )
{
- String id = repo.getId();
- Repository repository = new Repository( id, repo.getUrl() );
-
Wagon wagon;
try
{
- wagon = wagonManager.getWagon( repository );
+ wagon = wagonManager.getWagon( repo.getProtocol() );
}
catch ( UnsupportedProtocolException e )
{
log.error( "Unsupported protocol: '" + repo.getProtocol() + "'", e );
return false;
}
- catch ( WagonConfigurationException e )
- {
- log.error( "Unsupported protocol: '" + repo.getProtocol() + "'", e );
- return false;
- }
+
+ String id = repo.getId();
+ Repository repository = new Repository( id, repo.getUrl() );
if ( log.isDebugEnabled() )
{
@@ -179,7 +188,7 @@
wagon.connect( repository, auth );
}
- return ( wagon.resourceExists( repo.pathOf( artifact ) ) );
+ return wagon.resourceExists( StringUtils.replace( getDependencyUrlFromRepository(artifact, repo), repo.getUrl(), "" ) );
}
catch ( ConnectionException e )
{
@@ -270,4 +279,60 @@
return mavenProjectBuilder.buildFromRepository( projectArtifact, remoteRepositories, localRepository,
allowStubModel );
}
+
+ /**
+ * @param artifact not null
+ * @param repo not null
+ * @return the artifact url in the given repo for the given artifact. If it is a snapshot artifact, the version
+ * will be the the timestamp and the build number from the metadata.
+ */
+ public String getDependencyUrlFromRepository( Artifact artifact, ArtifactRepository repo )
+ {
+ Artifact copyArtifact = ArtifactUtils.copyArtifact( artifact );
+ // Try to get the last artifact repo name depending the snapshot version
+ if ( ( artifact.isSnapshot() && repo.getSnapshots().isEnabled() ) )
+ {
+ for ( Iterator it = artifact.getMetadataList().iterator(); it.hasNext(); )
+ {
+ ArtifactMetadata m = (ArtifactMetadata) it.next();
+ if ( m instanceof SnapshotArtifactRepositoryMetadata )
+ {
+ SnapshotArtifactRepositoryMetadata snapshotMetadata = (SnapshotArtifactRepositoryMetadata) m;
+
+ // Removed not found log
+ int oldThreshold = loggerManager.getThreshold();
+ loggerManager.setThreshold( RepositoryMetadataManager.class.getName(), Logger.LEVEL_DISABLED );
+ try
+ {
+ repositoryMetadataManager.resolveAlways( snapshotMetadata, localRepository, repo );
+ }
+ catch ( RepositoryMetadataResolutionException e )
+ {
+ loggerManager.setThreshold( RepositoryMetadataManager.class.getName(), oldThreshold );
+ log.error( "Unable to connect to: " + repo.getUrl(), e );
+ return artifact.getFile().getName();
+ }
+ finally
+ {
+ loggerManager.setThreshold( RepositoryMetadataManager.class.getName(), oldThreshold );
+ }
+
+ Metadata metadata = snapshotMetadata.getMetadata();
+ if ( metadata.getVersioning() == null || metadata.getVersioning().getSnapshot() == null
+ || metadata.getVersioning().getSnapshot().isLocalCopy()
+ || metadata.getVersioning().getSnapshot().getTimestamp() == null )
+ {
+ continue;
+ }
+
+ copyArtifact.setVersion( StringUtils
+ .replace( artifact.getVersion(), Artifact.SNAPSHOT_VERSION, metadata.getVersioning()
+ .getSnapshot().getTimestamp() )
+ + "-" + metadata.getVersioning().getSnapshot().getBuildNumber() );
+ }
+ }
+ }
+
+ return repo.getUrl() + "/" + repo.pathOf( copyArtifact );
+ }
}
Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/renderer/DependenciesRenderer.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/DependenciesRenderer.java?rev=675941&r1=675940&r2=675941&view=diff
==============================================================================
--- maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/renderer/DependenciesRenderer.java (original)
+++ maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/renderer/DependenciesRenderer.java Fri Jul 11 06:08:28 2008
@@ -708,10 +708,9 @@
String repokey = (String) itrepo.next();
ArtifactRepository repo = (ArtifactRepository) repoMap.get( repokey );
- String depUrl = repo.getUrl() + "/" + repo.pathOf( dependency );
+ String depUrl = repoUtils.getDependencyUrlFromRepository( dependency, repo );
boolean dependencyExists = false;
-
// check snapshots in snapshots repository only and releases in release repositories...
if ( ( dependency.isSnapshot() && repo.getSnapshots().isEnabled() )
|| ( !dependency.isSnapshot() && repo.getReleases().isEnabled() ) )
@@ -1181,6 +1180,7 @@
super( "########.00" );
}
+ /** {@inheritDoc} */
public StringBuffer format( long fs, StringBuffer result, FieldPosition fieldPosition )
{
if ( fs > 1024 * 1024 * 1024 )