You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by jd...@apache.org on 2005/07/19 06:15:58 UTC

svn commit: r219615 - in /maven/components/trunk: maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/ maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/ maven-core-it-verifier/src/main/java/org/apa...

Author: jdcasey
Date: Mon Jul 18 21:15:26 2005
New Revision: 219615

URL: http://svn.apache.org/viewcvs?rev=219615&view=rev
Log:
Centralized repository handling in AbstractVersionTransformation, for consistency (should fix MNG-527).

Changed download strategy for plugins.xml metadata to download only when non-existent locally or when plugin prefix cannot be located within local metadata. NOTE: This could lead to local-only installs of plugins having their prefix mappings overwritten.

Next step is to change the maven-plugin-plugin.

Modified:
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/LatestArtifactTransformation.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/ReleaseArtifactTransformation.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
    maven/components/trunk/maven-core-it-verifier/src/main/java/org/apache/maven/it/Verifier.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
    maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml
    maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/DefaultPluginMappingBuilder.java
    maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/MavenPluginMappingBuilder.java
    maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManager.java
    maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/metadata/PluginMappingMetadata.java
    maven/components/trunk/maven-plugin-registry/src/main/java/org/apache/maven/plugin/registry/DefaultPluginRegistryBuilder.java

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java Mon Jul 18 21:15:26 2005
@@ -23,6 +23,12 @@
     // only resolve repository metadata once per session...
     private Map cachedMetadata = new HashMap();
 
+    public void resolveLocally( RepositoryMetadata metadata, ArtifactRepository local )
+        throws RepositoryMetadataManagementException
+    {
+        resolve( metadata, null, local );
+    }
+    
     public void resolve( RepositoryMetadata metadata, ArtifactRepository remote, ArtifactRepository local )
         throws RepositoryMetadataManagementException
     {
@@ -30,29 +36,25 @@
 
         if ( metadataFile == null )
         {
-            metadataFile = constructLocalRepositoryFile( metadata, local, remote.getId() );
+            metadataFile = constructLocalRepositoryFile( metadata, local );
 
-            if ( remote == null )
-            {
-                throw new RepositoryMetadataManagementException( metadata,
-                                                                 "Cannot retrieve repository metadata from null repository." );
-            }
-            else
+            if ( !metadataFile.exists() && remote != null )
             {
                 try
                 {
                     File tempMetadataFile = File.createTempFile( "plugins.xml", null );
-                    
+
                     try
                     {
                         wagonManager.getRepositoryMetadata( metadata, remote, tempMetadataFile );
-                        
-                        if( !metadataFile.exists() || ( metadataFile.lastModified() <= tempMetadataFile.lastModified() ) )
+
+                        if ( !metadataFile.exists()
+                            || ( metadataFile.lastModified() <= tempMetadataFile.lastModified() ) )
                         {
                             if ( !tempMetadataFile.renameTo( metadataFile ) )
                             {
                                 FileUtils.copyFile( tempMetadataFile, metadataFile );
-                                
+
                                 tempMetadataFile.delete();
                             }
                         }
@@ -61,20 +63,18 @@
                     {
                         if ( !metadataFile.exists() )
                         {
-                            throw new RepositoryMetadataManagementException( metadata, "Remote repository metadata not found.",
-                                                                             e );
+                            throw new RepositoryMetadataManagementException( metadata,
+                                                                             "Remote repository metadata not found.", e );
                         }
                         else
                         {
                             String message = "Cannot find " + metadata + " in remote repository - Using local copy.";
-                            
+
                             getLogger().info( message );
-                            
+
                             getLogger().debug( message, e );
                         }
                     }
-                    
-                    metadata.setFile( metadataFile );
                 }
                 catch ( TransferFailedException e )
                 {
@@ -83,9 +83,18 @@
                 }
                 catch ( IOException e )
                 {
-                    throw new RepositoryMetadataManagementException( metadata, "Error constructing temporary metadata download file.", e );
+                    throw new RepositoryMetadataManagementException(
+                                                                     metadata,
+                                                                     "Error constructing temporary metadata download file.",
+                                                                     e );
                 }
             }
+            else
+            {
+                getLogger().info( "Using local copy of " + metadata + " from: " + metadataFile );
+            }
+
+            metadata.setFile( metadataFile );
         }
     }
 
@@ -110,18 +119,7 @@
     public void install( RepositoryMetadata metadata, ArtifactRepository local, String remoteRepositoryId )
         throws RepositoryMetadataManagementException
     {
-        String realignedPath = local.formatAsFile( metadata.getRepositoryPath() );
-
-        realignedPath = realignedPath.replace( File.separatorChar, '/' );
-
-        if ( !realignedPath.startsWith( "/" ) )
-        {
-            realignedPath = "/" + realignedPath;
-        }
-
-        realignedPath = "/REPOSITORY-INF/" + remoteRepositoryId + realignedPath;
-
-        File metadataFile = new File( local.getBasedir(), realignedPath ).getAbsoluteFile();
+        File metadataFile = constructLocalRepositoryFile( metadata, local );
 
         try
         {
@@ -141,20 +139,27 @@
 
     }
 
-    private File constructLocalRepositoryFile( RepositoryMetadata metadata, ArtifactRepository local, String remoteId )
+    public void purgeLocalCopy( RepositoryMetadata metadata, ArtifactRepository local )
+        throws RepositoryMetadataManagementException
     {
-        String metadataPath = local.formatAsFile( metadata.getRepositoryPath() );
-
-        String realignedPath = metadataPath.replace( File.separatorChar, '/' );
-
-        if ( !realignedPath.startsWith( "/" ) )
+        File metadataFile = constructLocalRepositoryFile( metadata, local );
+        
+        if ( metadataFile.exists() )
         {
-            realignedPath = "/" + realignedPath;
+            if ( !metadataFile.delete() )
+            {
+                throw new RepositoryMetadataManagementException( metadata, "Failed to purge local copy from: " + metadataFile );
+            }
         }
+    }
+
+    private File constructLocalRepositoryFile( RepositoryMetadata metadata, ArtifactRepository local )
+    {
+        String metadataPath = local.formatAsFile( metadata.getRepositoryPath() );
 
-        realignedPath = "/REPOSITORY-INF/" + remoteId + realignedPath;
+        metadataPath = metadataPath.replace( File.separatorChar, '/' );
 
-        return new File( local.getBasedir(), realignedPath );
+        return new File( local.getBasedir(), metadataPath );
     }
 
 }

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java Mon Jul 18 21:15:26 2005
@@ -5,6 +5,9 @@
 public interface RepositoryMetadataManager
 {
     
+    void resolveLocally( RepositoryMetadata repositoryMetadata, ArtifactRepository local )
+        throws RepositoryMetadataManagementException;
+
     void resolve( RepositoryMetadata repositoryMetadata, ArtifactRepository remote, ArtifactRepository local )
         throws RepositoryMetadataManagementException;
     
@@ -12,6 +15,9 @@
         throws RepositoryMetadataManagementException;
     
     void install( RepositoryMetadata repositoryMetadata, ArtifactRepository local, String remoteRepositoryId )
+        throws RepositoryMetadataManagementException;
+    
+    void purgeLocalCopy( RepositoryMetadata repositoryMetadata, ArtifactRepository local )
         throws RepositoryMetadataManagementException;
 
 }

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java Mon Jul 18 21:15:26 2005
@@ -18,9 +18,11 @@
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.manager.WagonManager;
+import org.apache.maven.artifact.metadata.AbstractVersionArtifactMetadata;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.metadata.VersionArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 
 import java.io.IOException;
@@ -101,8 +103,19 @@
                     getLogger().info(
                         artifact.getArtifactId() + ": checking for updates from " + remoteRepository.getId() );
 
-                    VersionArtifactMetadata remoteMetadata = retrieveFromRemoteRepository( artifact, remoteRepository, localMetadata );
-
+                    VersionArtifactMetadata remoteMetadata;
+                    
+                    try
+                    {
+                        remoteMetadata = retrieveFromRemoteRepository( artifact, remoteRepository, localMetadata );
+                    }
+                    catch ( ResourceDoesNotExistException e )
+                    {
+                        getLogger().debug( "Error resolving artifact version from metadata.", e );
+                        
+                        continue;
+                    }
+                    
                     int difference = remoteMetadata.compareTo( localMetadata );
                     if ( difference > 0 )
                     {
@@ -124,13 +137,13 @@
         }
 
         String version = localMetadata.constructVersion();
-
+        
         // TODO: if the POM and JAR are inconsistent, this might mean that different version of each are used
         if ( !artifact.getFile().exists() || localMetadata.newerThanFile( artifact.getFile() ) )
         {
             if ( getLogger().isInfoEnabled() && !alreadyResolved )
             {
-                if ( !version.equals( artifact.getBaseVersion() ) )
+                if ( version != null && !version.equals( artifact.getBaseVersion() ) )
                 {
                     String message = artifact.getArtifactId() + ": resolved to version " + version;
                     if ( artifact.getRepository() != null )
@@ -158,14 +171,27 @@
         }
     }
 
-    protected abstract VersionArtifactMetadata retrieveFromRemoteRepository( Artifact artifact,
-                                                                             ArtifactRepository remoteRepository,
-                                                                             VersionArtifactMetadata localMetadata )
-        throws ArtifactMetadataRetrievalException;
-
-    protected abstract VersionArtifactMetadata readFromLocalRepository( Artifact artifact,
-                                                                        ArtifactRepository localRepository )
-        throws IOException;
+    protected VersionArtifactMetadata retrieveFromRemoteRepository( Artifact artifact,
+                                                                    ArtifactRepository remoteRepository,
+                                                                    VersionArtifactMetadata localMetadata )
+        throws ArtifactMetadataRetrievalException, ResourceDoesNotExistException
+    {
+        AbstractVersionArtifactMetadata metadata = createMetadata( artifact );
+        
+        metadata.retrieveFromRemoteRepository( remoteRepository, wagonManager );
+        
+        return metadata;
+    }
+    
+    protected abstract AbstractVersionArtifactMetadata createMetadata( Artifact artifact );
+
+    private VersionArtifactMetadata readFromLocalRepository( Artifact artifact, ArtifactRepository localRepository )
+        throws IOException
+    {
+        AbstractVersionArtifactMetadata metadata = createMetadata( artifact );
+        metadata.readFromLocalRepository( localRepository );
+        return metadata;
+    }
 
     private Date getMidnightBoundary()
     {

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/LatestArtifactTransformation.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/LatestArtifactTransformation.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/LatestArtifactTransformation.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/LatestArtifactTransformation.java Mon Jul 18 21:15:26 2005
@@ -4,11 +4,8 @@
 import org.apache.maven.artifact.metadata.AbstractVersionArtifactMetadata;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.metadata.LatestArtifactMetadata;
-import org.apache.maven.artifact.metadata.VersionArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.wagon.ResourceDoesNotExistException;
 
-import java.io.IOException;
 import java.util.List;
 
 public class LatestArtifactTransformation
@@ -22,7 +19,7 @@
         if ( LATEST_VERSION.equals( artifact.getVersion() ) )
         {
             String version = resolveVersion( artifact, localRepository, remoteRepositories );
-            if ( !version.equals( artifact.getVersion() ) )
+            if ( version != null && !version.equals( artifact.getVersion() ) )
             {
                 artifact.setBaseVersion( version );
                 artifact.updateVersion( version, localRepository );
@@ -42,32 +39,9 @@
         // metadata is added at deploy time
     }
 
-    protected VersionArtifactMetadata retrieveFromRemoteRepository( Artifact artifact,
-                                                                    ArtifactRepository remoteRepository,
-                                                                    VersionArtifactMetadata localMetadata )
-        throws ArtifactMetadataRetrievalException
+    protected AbstractVersionArtifactMetadata createMetadata( Artifact artifact )
     {
-        AbstractVersionArtifactMetadata metadata = new LatestArtifactMetadata( artifact );
-        try
-        {
-            metadata.retrieveFromRemoteRepository( remoteRepository, wagonManager );
-        }
-        catch ( ResourceDoesNotExistException e )
-        {
-            if ( localMetadata.constructVersion() == null )
-            {
-                throw new ArtifactMetadataRetrievalException( "Unable to find latest version for plugin artifact " + artifact, e );
-            }
-            // otherwise, ignore - use the local one
-        }
-        return metadata;
+        return new LatestArtifactMetadata( artifact );
     }
 
-    protected VersionArtifactMetadata readFromLocalRepository( Artifact artifact, ArtifactRepository localRepository )
-        throws IOException
-    {
-        AbstractVersionArtifactMetadata metadata = new LatestArtifactMetadata( artifact );
-        metadata.readFromLocalRepository( localRepository );
-        return metadata;
-    }
 }

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/ReleaseArtifactTransformation.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/ReleaseArtifactTransformation.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/ReleaseArtifactTransformation.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/ReleaseArtifactTransformation.java Mon Jul 18 21:15:26 2005
@@ -20,11 +20,8 @@
 import org.apache.maven.artifact.metadata.AbstractVersionArtifactMetadata;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.metadata.ReleaseArtifactMetadata;
-import org.apache.maven.artifact.metadata.VersionArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.wagon.ResourceDoesNotExistException;
 
-import java.io.IOException;
 import java.util.List;
 
 /**
@@ -44,7 +41,8 @@
         if ( RELEASE_VERSION.equals( artifact.getVersion() ) )
         {
             String version = resolveVersion( artifact, localRepository, remoteRepositories );
-            if ( !version.equals( artifact.getVersion() ) )
+            
+            if ( version != null && !version.equals( artifact.getVersion() ) )
             {
                 artifact.setBaseVersion( version );
                 artifact.updateVersion( version, localRepository );
@@ -64,32 +62,9 @@
         // metadata is added at deploy time
     }
 
-    protected VersionArtifactMetadata retrieveFromRemoteRepository( Artifact artifact,
-                                                                    ArtifactRepository remoteRepository,
-                                                                    VersionArtifactMetadata localMetadata )
-        throws ArtifactMetadataRetrievalException
+    protected AbstractVersionArtifactMetadata createMetadata( Artifact artifact )
     {
-        AbstractVersionArtifactMetadata metadata = new ReleaseArtifactMetadata( artifact );
-        try
-        {
-            metadata.retrieveFromRemoteRepository( remoteRepository, wagonManager );
-        }
-        catch ( ResourceDoesNotExistException e )
-        {
-            if ( localMetadata.constructVersion() == null )
-            {
-                throw new ArtifactMetadataRetrievalException( "Unable to find release for artifact " + artifact, e );
-            }
-            // otherwise, ignore - use the local one
-        }
-        return metadata;
+        return new ReleaseArtifactMetadata( artifact );
     }
 
-    protected VersionArtifactMetadata readFromLocalRepository( Artifact artifact, ArtifactRepository localRepository )
-        throws IOException
-    {
-        AbstractVersionArtifactMetadata metadata = new ReleaseArtifactMetadata( artifact );
-        metadata.readFromLocalRepository( localRepository );
-        return metadata;
-    }
 }

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java Mon Jul 18 21:15:26 2005
@@ -17,13 +17,12 @@
  */
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.AbstractVersionArtifactMetadata;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.metadata.SnapshotArtifactMetadata;
-import org.apache.maven.artifact.metadata.VersionArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.wagon.ResourceDoesNotExistException;
 
-import java.io.IOException;
 import java.util.List;
 import java.util.regex.Matcher;
 
@@ -81,7 +80,16 @@
         else if ( isSnapshot( artifact ) )
         {
             SnapshotArtifactMetadata metadata = null;
-            metadata = (SnapshotArtifactMetadata) retrieveFromRemoteRepository( artifact, remoteRepository, null );
+            
+            try
+            {
+                metadata = (SnapshotArtifactMetadata) retrieveFromRemoteRepository( artifact, remoteRepository, null );
+            }
+            catch ( ResourceDoesNotExistException e )
+            {
+                // ignore. We'll be creating this metadata if it doesn't exist...
+            }
+
             metadata.update();
 
             artifact.setVersion( metadata.constructVersion() );
@@ -95,29 +103,9 @@
         return artifact.getVersion().endsWith( SNAPSHOT_VERSION );
     }
 
-    protected VersionArtifactMetadata retrieveFromRemoteRepository( Artifact artifact,
-                                                                    ArtifactRepository remoteRepository,
-                                                                    VersionArtifactMetadata localMetadata )
-        throws ArtifactMetadataRetrievalException
+    protected AbstractVersionArtifactMetadata createMetadata( Artifact artifact )
     {
-        SnapshotArtifactMetadata metadata = new SnapshotArtifactMetadata( artifact );
-        try
-        {
-            metadata.retrieveFromRemoteRepository( remoteRepository, wagonManager );
-        }
-        catch ( ResourceDoesNotExistException e )
-        {
-            // No problem...
-            // this just means that there is no snapshot version file, so we keep timestamp = null, build = 0
-        }
-        return metadata;
+        return new SnapshotArtifactMetadata( artifact );
     }
 
-    protected VersionArtifactMetadata readFromLocalRepository( Artifact artifact, ArtifactRepository localRepository )
-        throws IOException
-    {
-        SnapshotArtifactMetadata metadata = new SnapshotArtifactMetadata( artifact );
-        metadata.readFromLocalRepository( localRepository );
-        return metadata;
-    }
 }

Modified: maven/components/trunk/maven-core-it-verifier/src/main/java/org/apache/maven/it/Verifier.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it-verifier/src/main/java/org/apache/maven/it/Verifier.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-core-it-verifier/src/main/java/org/apache/maven/it/Verifier.java (original)
+++ maven/components/trunk/maven-core-it-verifier/src/main/java/org/apache/maven/it/Verifier.java Mon Jul 18 21:15:26 2005
@@ -493,8 +493,8 @@
 
             cli.setExecutable( executable );
             
-//            cli.createArgument().setValue( "-e" );
-            cli.createArgument().setValue( "-X" );
+            cli.createArgument().setValue( "-e" );
+//            cli.createArgument().setValue( "-X" );
             
             cli.createArgument().setValue( "--no-plugin-registry" );
             

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java Mon Jul 18 21:15:26 2005
@@ -570,7 +570,26 @@
 
             // Steps for retrieving the plugin model instance:
             // 1. request directly from the plugin collector by prefix
-            pluginDescriptor = pluginManager.getPluginDescriptorForPrefix( prefix );
+            try
+            {
+                pluginDescriptor = pluginManager.getPluginDescriptorForPrefix( prefix );
+            }
+            catch ( PluginManagerException e )
+            {
+                throw new LifecycleExecutionException( "Cannot resolve plugin-prefix: \'" + prefix + "\' from plugin collector.", e );
+            }
+            
+            if ( pluginDescriptor == null )
+            {
+                try
+                {
+                    plugin = pluginManager.getPluginDefinitionForPrefix( prefix, session, project );
+                }
+                catch ( PluginManagerException e )
+                {
+                    throw new LifecycleExecutionException( "Cannot resolve plugin-prefix: \'" + prefix + "\' from plugin mappings metadata.", e );
+                }
+            }
 
             if ( pluginDescriptor != null )
             {
@@ -581,15 +600,7 @@
                 plugin.setVersion( pluginDescriptor.getVersion() );
             }
 
-            // 2. use the plugin resolver to resolve the prefix in the search groups
-            if ( plugin == null )
-            {
-                PluginMappingManager mappingManager = getPluginMappingManager( session, project );
-
-                plugin = mappingManager.getByPrefix( prefix );
-            }
-
-            // 3. default to o.a.m.plugins and maven-<prefix>-plugin
+            // 2. default to o.a.m.plugins and maven-<prefix>-plugin
             if ( plugin == null )
             {
                 plugin = new Plugin();

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java Mon Jul 18 21:15:26 2005
@@ -21,6 +21,7 @@
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.metadata.ResolutionGroup;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManagementException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
@@ -40,6 +41,9 @@
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
 import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.plugin.mapping.MavenPluginMappingBuilder;
+import org.apache.maven.plugin.mapping.PluginMappingManagementException;
+import org.apache.maven.plugin.mapping.PluginMappingManager;
 import org.apache.maven.plugin.version.PluginVersionManager;
 import org.apache.maven.plugin.version.PluginVersionResolutionException;
 import org.apache.maven.project.MavenProject;
@@ -67,6 +71,7 @@
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
@@ -74,7 +79,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.lang.reflect.Field;
 
 public class DefaultPluginManager
     extends AbstractLogEnabled
@@ -100,6 +104,8 @@
     protected ArtifactResolver artifactResolver;
 
     protected MavenProjectBuilder mavenProjectBuilder;
+    
+    protected MavenPluginMappingBuilder pluginMappingBuilder;
     // END component requirements
 
     public DefaultPluginManager()
@@ -112,9 +118,41 @@
     // ----------------------------------------------------------------------
 
     public PluginDescriptor getPluginDescriptorForPrefix( String prefix )
+        throws PluginManagerException
     {
         return pluginCollector.getPluginDescriptorForPrefix( prefix );
     }
+    
+    public Plugin getPluginDefinitionForPrefix( String prefix, MavenSession session, MavenProject project ) throws PluginManagerException
+    {
+        PluginMappingManager mappingManager = getPluginMappingManager( session, project );
+
+        Plugin plugin = mappingManager.getByPrefix( prefix );
+        
+        if ( plugin == null && !mappingManager.isRefreshed() )
+        {
+            getLogger().info( "Refreshing plugin mapping metadata; looking for plugin with prefix: \'" + prefix + "\'." );
+            
+            try
+            {
+                mappingManager = pluginMappingBuilder.refreshPluginMappingManager( session
+                    .getPluginMappingManager(), project.getPluginArtifactRepositories(), session
+                    .getLocalRepository() );
+            }
+            catch ( RepositoryMetadataManagementException e )
+            {
+                throw new PluginManagerException( "Error refreshing plugin mappings.", e );
+            }
+            catch ( PluginMappingManagementException e )
+            {
+                throw new PluginManagerException( "Error refreshing plugin mappings.", e );
+            }
+            
+            plugin = mappingManager.getByPrefix( prefix );
+        }
+        
+        return plugin;
+    }
 
     public PluginDescriptor verifyPlugin( Plugin plugin, MavenProject project, Settings settings,
                                           ArtifactRepository localRepository )
@@ -929,4 +967,36 @@
         return pluginContainer.lookup( role, roleHint );
     }
 
+    private PluginMappingManager getPluginMappingManager( MavenSession session, MavenProject project ) 
+    throws PluginManagerException
+{
+    PluginMappingManager mappingManager = session.getPluginMappingManager();
+
+    // don't reassemble the plugin mappings if the session has already been configured with them.
+    if ( mappingManager == null )
+    {
+        try
+        {
+            List pluginGroupIds = session.getSettings().getPluginGroups();
+            List pluginRepositories = project.getPluginArtifactRepositories();
+            ArtifactRepository localRepository = session.getLocalRepository();
+
+            mappingManager = pluginMappingBuilder.loadPluginMappings( pluginGroupIds, pluginRepositories,
+                                                                      localRepository );
+
+            // lazily configure this on the session.
+            session.setPluginMappingManager( mappingManager );
+        }
+        catch ( RepositoryMetadataManagementException e )
+        {
+            throw new PluginManagerException( "Cannot load plugin mappings.", e );
+        }
+        catch ( PluginMappingManagementException e )
+        {
+            throw new PluginManagerException( "Cannot load plugin mappings.", e );
+        }
+    }
+    
+    return mappingManager;
+}
 }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java Mon Jul 18 21:15:26 2005
@@ -41,8 +41,12 @@
     void executeMojo( MavenProject project, MojoExecution execution, MavenSession session )
         throws MojoExecutionException, PluginManagerException, ArtifactResolutionException;
 
-    PluginDescriptor getPluginDescriptorForPrefix( String prefix );
+    PluginDescriptor getPluginDescriptorForPrefix( String prefix )
+        throws PluginManagerException;
 
+    Plugin getPluginDefinitionForPrefix( String prefix, MavenSession session, MavenProject project ) 
+        throws PluginManagerException;
+    
     PluginDescriptor verifyPlugin( Plugin plugin, MavenProject project, Settings settings,
                                   ArtifactRepository localRepository )
         throws ArtifactResolutionException, PluginManagerException, PluginVersionResolutionException;

Modified: maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml Mon Jul 18 21:15:26 2005
@@ -22,6 +22,9 @@
         <requirement>
           <role>org.apache.maven.project.MavenProjectBuilder</role>
         </requirement>
+        <requirement>
+          <role>org.apache.maven.plugin.mapping.MavenPluginMappingBuilder</role>
+        </requirement>
       </requirements>
     </component>
 

Modified: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/DefaultPluginMappingBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/DefaultPluginMappingBuilder.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/DefaultPluginMappingBuilder.java (original)
+++ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/DefaultPluginMappingBuilder.java Mon Jul 18 21:15:26 2005
@@ -29,14 +29,50 @@
                                                    ArtifactRepository localRepository )
         throws RepositoryMetadataManagementException, PluginMappingManagementException
     {
-        List pluginGroupIds = new ArrayList( groupIds );
+        return loadPluginMappings( groupIds, pluginRepositories, localRepository, new PluginMappingManager() );
+    }
+
+    public PluginMappingManager refreshPluginMappingManager( PluginMappingManager mappingManager, List pluginRepositories,
+                                                             ArtifactRepository localRepository )
+        throws RepositoryMetadataManagementException, PluginMappingManagementException
+    {
+        // prevent performance drag from abuse of this method.
+        if ( mappingManager.isRefreshed() )
+        {
+            throw new PluginMappingManagementException( "Plugin-mappings have already been refreshed. Cannot re-refresh." );
+        }
+        
+        getLogger().info( "Refreshing plugin-mapping metadata..." );
+        
+        List groupIds = new ArrayList();
+        
+        for ( Iterator it = mappingManager.getPluginMaps().iterator(); it.hasNext(); )
+        {
+            PluginMap map = (PluginMap) it.next();
+            
+            String groupId = map.getGroupId();
+            
+            groupIds.add( groupId );
+            
+            repositoryMetadataManager.purgeLocalCopy( new PluginMappingMetadata( groupId ), localRepository );
+        }
         
+        mappingManager.markRefreshed();
+        
+        return loadPluginMappings(groupIds, pluginRepositories, localRepository, mappingManager);
+    }
+
+    private PluginMappingManager loadPluginMappings( List groupIds, List pluginRepositories,
+                                                    ArtifactRepository localRepository,
+                                                    PluginMappingManager mappingManager )
+        throws RepositoryMetadataManagementException, PluginMappingManagementException
+    {
+        List pluginGroupIds = new ArrayList( groupIds );
+
         if ( !pluginGroupIds.contains( "org.apache.maven.plugins" ) )
         {
             pluginGroupIds.add( "org.apache.maven.plugins" );
         }
-        
-        PluginMappingManager mappingManager = new PluginMappingManager();
 
         if ( pluginGroupIds != null )
         {
@@ -57,8 +93,9 @@
                 }
                 catch ( RepositoryMetadataManagementException e )
                 {
-                    getLogger().warn( "Cannot resolve plugin-mapping metadata for groupId: " + groupId + " - IGNORING." );
-                    
+                    getLogger()
+                        .warn( "Cannot resolve plugin-mapping metadata for groupId: " + groupId + " - IGNORING." );
+
                     getLogger().debug( "Error resolving plugin-mapping metadata for groupId: " + groupId + ".", e );
                 }
             }
@@ -67,9 +104,10 @@
         return mappingManager;
     }
 
-    private PluginMap readPluginMap( File mappingFile ) throws PluginMappingManagementException
+    private PluginMap readPluginMap( File mappingFile )
+        throws PluginMappingManagementException
     {
-        if( mappingFile.exists() )
+        if ( mappingFile.exists() )
         {
             Reader fileReader = null;
             try
@@ -77,8 +115,8 @@
                 fileReader = new FileReader( mappingFile );
 
                 PluginMappingXpp3Reader mappingReader = new PluginMappingXpp3Reader();
-                
-                return mappingReader.read(fileReader);
+
+                return mappingReader.read( fileReader );
             }
             catch ( IOException e )
             {
@@ -113,7 +151,7 @@
             try
             {
                 repositoryMetadataManager.resolve( metadata, repository, localRepository );
-                
+
                 // reset this to keep it from getting in the way when we succeed but not on first repo...
                 repositoryException = null;
 

Modified: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/MavenPluginMappingBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/MavenPluginMappingBuilder.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/MavenPluginMappingBuilder.java (original)
+++ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/MavenPluginMappingBuilder.java Mon Jul 18 21:15:26 2005
@@ -12,4 +12,8 @@
                                             ArtifactRepository localRepository )
         throws RepositoryMetadataManagementException, PluginMappingManagementException;
 
+    PluginMappingManager refreshPluginMappingManager( PluginMappingManager mappingManager, List pluginRepositories,
+                                                      ArtifactRepository localRepository )
+        throws RepositoryMetadataManagementException, PluginMappingManagementException;
+
 }

Modified: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManager.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManager.java (original)
+++ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManager.java Mon Jul 18 21:15:26 2005
@@ -12,6 +12,7 @@
 {
 
     private List mappings = new ArrayList();
+    private boolean refreshed = false;
 
     private Map pluginDefinitionsByPrefix = new HashMap();
     private Map pluginDefinitionsByPackaging = new HashMap();
@@ -20,9 +21,34 @@
     {
         mappings.add( pluginMap );
         
-        // flush the cache.
-        pluginDefinitionsByPrefix = null;
-        pluginDefinitionsByPackaging = null;
+        clearCache();
+    }
+    
+    public void markRefreshed()
+    {
+        this.refreshed = true;
+    }
+    
+    public boolean isRefreshed()
+    {
+        return refreshed;
+    }
+    
+    public List getPluginMaps()
+    {
+        return mappings;
+    }
+    
+    public void clear()
+    {
+        this.mappings = null;
+        clearCache();
+    }
+
+    private void clearCache()
+    {
+        this.pluginDefinitionsByPackaging = null;
+        this.pluginDefinitionsByPrefix = null;
     }
 
     public Plugin getByPrefix( String pluginPrefix )

Modified: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/metadata/PluginMappingMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/metadata/PluginMappingMetadata.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/metadata/PluginMappingMetadata.java (original)
+++ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/metadata/PluginMappingMetadata.java Mon Jul 18 21:15:26 2005
@@ -17,7 +17,7 @@
     {
         this.groupId = groupId;
     }
-
+    
     public String getRepositoryPath()
     {
         return groupId + "/" + PLUGIN_MAPPING_FILE;

Modified: maven/components/trunk/maven-plugin-registry/src/main/java/org/apache/maven/plugin/registry/DefaultPluginRegistryBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugin-registry/src/main/java/org/apache/maven/plugin/registry/DefaultPluginRegistryBuilder.java?rev=219615&r1=219614&r2=219615&view=diff
==============================================================================
--- maven/components/trunk/maven-plugin-registry/src/main/java/org/apache/maven/plugin/registry/DefaultPluginRegistryBuilder.java (original)
+++ maven/components/trunk/maven-plugin-registry/src/main/java/org/apache/maven/plugin/registry/DefaultPluginRegistryBuilder.java Mon Jul 18 21:15:26 2005
@@ -58,8 +58,8 @@
         
         globalRegistryFile = getFile( globalRegistryPath, "maven.home", MavenPluginRegistryBuilder.ALT_GLOBAL_PLUGIN_REG_LOCATION );
 
-        getLogger().debug( "Building Maven global-level settings from: '" + globalRegistryFile.getAbsolutePath() + "'" );
-        getLogger().debug( "Building Maven user-level settings from: '" + userRegistryFile.getAbsolutePath() + "'" );
+        getLogger().debug( "Building Maven global-level plugin registry from: '" + globalRegistryFile.getAbsolutePath() + "'" );
+        getLogger().debug( "Building Maven user-level plugin registry from: '" + userRegistryFile.getAbsolutePath() + "'" );
     }
     
     public PluginRegistry buildPluginRegistry()



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org