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 )