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 2010/02/01 22:57:40 UTC

svn commit: r905424 - /maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java

Author: bentmann
Date: Mon Feb  1 21:57:40 2010
New Revision: 905424

URL: http://svn.apache.org/viewvc?rev=905424&view=rev
Log:
[MNG-4554] [regression] plugin updates are requested on every build regardless of policies

Modified:
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java?rev=905424&r1=905423&r2=905424&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java Mon Feb  1 21:57:40 2010
@@ -21,6 +21,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -68,6 +69,8 @@
     public PluginPrefixResult resolve( PluginPrefixRequest request )
         throws NoPluginFoundForPrefixException
     {
+        logger.debug( "Resolving plugin prefix " + request.getPrefix() + " from " + request.getPluginGroups() );
+
         PluginPrefixResult result = resolveFromProject( request );
 
         if ( result == null )
@@ -80,6 +83,17 @@
                                                            request.getLocalRepository(),
                                                            request.getRemoteRepositories() );
             }
+            else if ( logger.isDebugEnabled() )
+            {
+                logger.debug( "Resolved plugin prefix " + request.getPrefix() + " to " + result.getGroupId() + ":"
+                    + result.getArtifactId() + " from repository "
+                    + ( result.getRepository() != null ? result.getRepository().getId() : "null" ) );
+            }
+        }
+        else if ( logger.isDebugEnabled() )
+        {
+            logger.debug( "Resolved plugin prefix " + request.getPrefix() + " to " + result.getGroupId() + ":"
+                + result.getArtifactId() + " from POM " + request.getPom() );
         }
 
         return result;
@@ -142,12 +156,12 @@
         //
         for ( String pluginGroup : request.getPluginGroups() )
         {
-            String localPath =
-                pluginGroup.replace( '.', '/' ) + "/" + "maven-metadata-" + localRepository.getId() + ".xml";
+            String localPath = getLocalMetadataPath( pluginGroup, localRepository );
 
-            File destination = new File( localRepository.getBasedir(), localPath );
+            File groupMetadataFile = new File( localRepository.getBasedir(), localPath );
 
-            PluginPrefixResult result = resolveFromRepository( request, pluginGroup, destination, localRepository );
+            PluginPrefixResult result =
+                resolveFromRepository( request, pluginGroup, groupMetadataFile, localRepository );
 
             if ( result != null )
             {
@@ -155,24 +169,26 @@
             }
         }
 
+        List<ArtifactRepository> recheck = new ArrayList<ArtifactRepository>();
+
         // Process all the remote repositories.
         //
         for ( String pluginGroup : request.getPluginGroups() )
         {
             for ( ArtifactRepository repository : request.getRemoteRepositories() )
             {
-                String localPath =
-                    pluginGroup.replace( '.', '/' ) + "/" + "maven-metadata-" + repository.getId() + ".xml";
+                String localPath = getLocalMetadataPath( pluginGroup, repository );
 
-                File destination = new File( localRepository.getBasedir(), localPath );
+                File groupMetadataFile = new File( localRepository.getBasedir(), localPath );
 
-                if ( !request.isOffline() )
+                if ( !request.isOffline() && ( !groupMetadataFile.exists() || request.isForceUpdate() ) )
                 {
-                    String remotePath = pluginGroup.replace( '.', '/' ) + "/" + "maven-metadata.xml";
+                    String remotePath = getRemoteMetadataPath( pluginGroup, repository );
 
                     try
                     {
-                        repositorySystem.retrieve( repository, destination, remotePath, request.getTransferListener() );
+                        repositorySystem.retrieve( repository, groupMetadataFile, remotePath,
+                                                   request.getTransferListener() );
                     }
                     catch ( ArtifactTransferFailedException e )
                     {
@@ -190,8 +206,53 @@
                         continue;
                     }
                 }
+                else if ( !request.isOffline() && !request.isForceUpdate() )
+                {
+                    recheck.add( repository );
+                }
+
+                PluginPrefixResult result = resolveFromRepository( request, pluginGroup, groupMetadataFile, repository );
+
+                if ( result != null )
+                {
+                    return result;
+                }
+            }
+        }
+
+        // Retry the remote repositories for which we previously only consulted the possibly outdated local cache.
+        //
+        for ( String pluginGroup : request.getPluginGroups() )
+        {
+            for ( ArtifactRepository repository : recheck )
+            {
+                String localPath = getLocalMetadataPath( pluginGroup, repository );
+
+                File groupMetadataFile = new File( localRepository.getBasedir(), localPath );
+
+                String remotePath = getRemoteMetadataPath( pluginGroup, repository );
+
+                try
+                {
+                    repositorySystem.retrieve( repository, groupMetadataFile, remotePath, request.getTransferListener() );
+                }
+                catch ( ArtifactTransferFailedException e )
+                {
+                    if ( logger.isDebugEnabled() )
+                    {
+                        logger.warn( "Failed to retrieve " + remotePath + ": " + e.getMessage(), e );
+                    }
+                    else
+                    {
+                        logger.warn( "Failed to retrieve " + remotePath + ": " + e.getMessage() );
+                    }
+                }
+                catch ( ArtifactDoesNotExistException e )
+                {
+                    continue;
+                }
 
-                PluginPrefixResult result = resolveFromRepository( request, pluginGroup, destination, repository );
+                PluginPrefixResult result = resolveFromRepository( request, pluginGroup, groupMetadataFile, repository );
 
                 if ( result != null )
                 {
@@ -243,4 +304,14 @@
         return null;
     }
 
+    private String getLocalMetadataPath( String groupId, ArtifactRepository repository )
+    {
+        return groupId.replace( '.', '/' ) + "/" + "maven-metadata-" + repository.getId() + ".xml";
+    }
+
+    private String getRemoteMetadataPath( String groupId, ArtifactRepository repository )
+    {
+        return groupId.replace( '.', '/' ) + "/" + "maven-metadata.xml";
+    }
+
 }