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/12 06:13:42 UTC

svn commit: r215919 - in /maven/components/trunk: maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/ maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/ maven-artifact-manager/src/main/java/org/apache/maven/a...

Author: jdcasey
Date: Mon Jul 11 21:13:40 2005
New Revision: 215919

URL: http://svn.apache.org/viewcvs?rev=215919&view=rev
Log:
Resolving:

MNG-511
MNG-513

Working on:

MNG-449

o Added code to stop the version manager from prompting the user for unregistered plugins; it will simply register them with the resolved version.

o Added failover fourth plugin-version resolution option, which is a plugin-specific artifact metadata called LATEST.version.txt, and will be published with each install/deployment

o Added MavenProject.get/setArtifact(..) to handle a single artifact instance for a project (allows injection of artifact metadata without having to handle it all within the install/deploy mojos).

o Changed plugin-version resolution to only use MavenMetadataSource rather than resolving the whole plugin artifact.

o Changed the install and deploy mojos to only use ${project.artifact} rather than constructing their own, so they can take advantage of metadata added elsewhere in the build.

o Factored the "RELEASE".equals(..) check in the DefaultRepositoryLayout to use new metadata method storedInArtifactDirectory() instead, since RELEASE and LATEST both share this characteristic.


NOTE: I'm not going to resolve MNG-449 yet, because I'm not sure what else Brett had in mind related to the plugin-development-without-release use case...


Added:
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/LatestArtifactMetadata.java   (with props)
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/LatestArtifactTransformation.java   (with props)
    maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/AddPluginArtifactMetadataMojo.java   (with props)
Modified:
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/ReleaseArtifactMetadata.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/resources/META-INF/plexus/components.xml
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/AbstractArtifactMetadata.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java
    maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml
    maven/components/trunk/maven-plugins/maven-deploy-plugin/src/main/java/org/apache/maven/plugin/deploy/DeployMojo.java
    maven/components/trunk/maven-plugins/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallMojo.java
    maven/components/trunk/maven-plugins/maven-plugin-plugin/pom.xml
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java?rev=215919&r1=215918&r2=215919&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java Mon Jul 11 21:13:40 2005
@@ -75,6 +75,7 @@
             for ( Iterator i = artifact.getMetadataList().iterator(); i.hasNext(); )
             {
                 ArtifactMetadata metadata = (ArtifactMetadata) i.next();
+                
                 metadata.storeInLocalRepository( localRepository );
             }
         }

Added: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/LatestArtifactMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/LatestArtifactMetadata.java?rev=215919&view=auto
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/LatestArtifactMetadata.java (added)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/LatestArtifactMetadata.java Mon Jul 11 21:13:40 2005
@@ -0,0 +1,85 @@
+package org.apache.maven.artifact.metadata;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.transform.LatestArtifactTransformation;
+
+import java.io.File;
+
+public class LatestArtifactMetadata
+    extends AbstractVersionArtifactMetadata
+{
+    
+    private String version;
+
+    public LatestArtifactMetadata( Artifact artifact )
+    {
+        super( artifact, artifact.getArtifactId() + "-" + LatestArtifactTransformation.LATEST_VERSION + "." + SNAPSHOT_VERSION_FILE );
+    }
+
+    public String constructVersion()
+    {
+        return version;
+    }
+
+    public int compareTo( Object o )
+    {
+        LatestArtifactMetadata metadata = (LatestArtifactMetadata) o;
+
+        // TODO: we need some more complicated version comparison
+        if ( version == null )
+        {
+            if ( metadata.version == null )
+            {
+                return 0;
+            }
+            else
+            {
+                return -1;
+            }
+        }
+        else
+        {
+            if ( metadata.version == null )
+            {
+                return 1;
+            }
+            else
+            {
+                return version.compareTo( metadata.version );
+            }
+        }
+    }
+
+    public boolean newerThanFile( File file )
+    {
+        long fileTime = file.lastModified();
+
+        return ( lastModified > fileTime );
+    }
+
+    public String toString()
+    {
+        return "latest-version information for " + artifact.getArtifactId();
+    }
+
+    protected void setContent( String content )
+    {
+        this.version = content.trim();
+    }
+
+    public void setVersion( String version )
+    {
+        this.version = version;
+    }
+
+    public String getBaseVersion()
+    {
+        return LatestArtifactTransformation.LATEST_VERSION;
+    }
+    
+    public boolean storedInArtifactDirectory()
+    {
+        return false;
+    }
+
+}

Propchange: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/LatestArtifactMetadata.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/LatestArtifactMetadata.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/ReleaseArtifactMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/ReleaseArtifactMetadata.java?rev=215919&r1=215918&r2=215919&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/ReleaseArtifactMetadata.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/ReleaseArtifactMetadata.java Mon Jul 11 21:13:40 2005
@@ -98,4 +98,10 @@
     {
         return ReleaseArtifactTransformation.RELEASE_VERSION;
     }
+    
+    public boolean storedInArtifactDirectory()
+    {
+        return false;
+    }
+
 }

Added: 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=215919&view=auto
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/LatestArtifactTransformation.java (added)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/LatestArtifactTransformation.java Mon Jul 11 21:13:40 2005
@@ -0,0 +1,73 @@
+package org.apache.maven.artifact.transform;
+
+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.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
+    extends AbstractVersionTransformation
+{
+    public static final String LATEST_VERSION = "LATEST";
+
+    public void transformForResolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
+        throws ArtifactMetadataRetrievalException
+    {
+        if ( LATEST_VERSION.equals( artifact.getVersion() ) )
+        {
+            String version = resolveVersion( artifact, localRepository, remoteRepositories );
+            if ( !version.equals( artifact.getVersion() ) )
+            {
+                artifact.setBaseVersion( version );
+                artifact.updateVersion( version, localRepository );
+            }
+        }
+    }
+
+    public void transformForInstall( Artifact artifact, ArtifactRepository localRepository )
+        throws ArtifactMetadataRetrievalException
+    {
+        // metadata is added at install time
+    }
+
+    public void transformForDeployment( Artifact artifact, ArtifactRepository remoteRepository )
+        throws ArtifactMetadataRetrievalException
+    {
+        // metadata is added at deploy time
+    }
+
+    protected VersionArtifactMetadata retrieveFromRemoteRepository( Artifact artifact,
+                                                                    ArtifactRepository remoteRepository,
+                                                                    VersionArtifactMetadata localMetadata )
+        throws ArtifactMetadataRetrievalException
+    {
+        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;
+    }
+
+    protected VersionArtifactMetadata readFromLocalRepository( Artifact artifact, ArtifactRepository localRepository )
+        throws IOException
+    {
+        AbstractVersionArtifactMetadata metadata = new LatestArtifactMetadata( artifact );
+        metadata.readFromLocalRepository( localRepository );
+        return metadata;
+    }
+}

Propchange: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/LatestArtifactTransformation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/LatestArtifactTransformation.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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=215919&r1=215918&r2=215919&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 11 21:13:40 2005
@@ -38,15 +38,10 @@
 {
     public static final String RELEASE_VERSION = "RELEASE";
 
-    private static boolean isRelease( Artifact artifact )
-    {
-        return artifact.getVersion().equals( RELEASE_VERSION );
-    }
-
     public void transformForResolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
         throws ArtifactMetadataRetrievalException
     {
-        if ( isRelease( artifact ) )
+        if ( RELEASE_VERSION.equals( artifact.getVersion() ) )
         {
             String version = resolveVersion( artifact, localRepository, remoteRepositories );
             if ( !version.equals( artifact.getVersion() ) )

Modified: maven/components/trunk/maven-artifact-manager/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/resources/META-INF/plexus/components.xml?rev=215919&r1=215918&r2=215919&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/resources/META-INF/plexus/components.xml Mon Jul 11 21:13:40 2005
@@ -36,6 +36,17 @@
         </requirement>
       </requirements>
     </component>
+    
+    <component>
+      <role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
+      <role-hint>latest</role-hint>
+      <implementation>org.apache.maven.artifact.transform.LatestArtifactTransformation</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.artifact.manager.WagonManager</role>
+        </requirement>
+      </requirements>
+    </component>
     <!--
      |
      | Resolver

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/AbstractArtifactMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/AbstractArtifactMetadata.java?rev=215919&r1=215918&r2=215919&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/AbstractArtifactMetadata.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/AbstractArtifactMetadata.java Mon Jul 11 21:13:40 2005
@@ -46,6 +46,11 @@
     {
         return filename;
     }
+    
+    public boolean storedInArtifactDirectory()
+    {
+        return true;
+    }
 
     public String getGroupId()
     {

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java?rev=215919&r1=215918&r2=215919&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java Mon Jul 11 21:13:40 2005
@@ -58,6 +58,11 @@
      * @return true or false
      */
     boolean exists();
+    
+    /**
+     * Whether this metadata should be stored alongside the artifact.
+     */
+    boolean storedInArtifactDirectory();
 
     String getGroupId();
 

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java?rev=215919&r1=215918&r2=215919&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java Mon Jul 11 21:13:40 2005
@@ -57,7 +57,7 @@
 
         path.append( formatAsDirectory( metadata.getGroupId() ) ).append( '/' );
         path.append( metadata.getArtifactId() ).append( '/' );
-        if ( !metadata.getBaseVersion().equals( "RELEASE" ) )
+        if ( metadata.storedInArtifactDirectory() )
         {
             path.append( metadata.getBaseVersion() ).append( '/' );
         }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java?rev=215919&r1=215918&r2=215919&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionManager.java Mon Jul 11 21:13:40 2005
@@ -2,9 +2,11 @@
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.transform.LatestArtifactTransformation;
+import org.apache.maven.artifact.transform.ReleaseArtifactTransformation;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.ReportPlugin;
 import org.apache.maven.plugin.registry.MavenPluginRegistryBuilder;
@@ -13,6 +15,8 @@
 import org.apache.maven.plugin.registry.TrackableBase;
 import org.apache.maven.plugin.registry.io.xpp3.PluginRegistryXpp3Writer;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.artifact.MavenMetadataSource;
 import org.apache.maven.settings.Settings;
 import org.codehaus.plexus.components.inputhandler.InputHandler;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -58,6 +62,8 @@
 
     private ArtifactFactory artifactFactory;
 
+    private MavenProjectBuilder projectBuilder;
+
     private InputHandler inputHandler;
 
     // calculated.
@@ -96,8 +102,8 @@
                 if ( Boolean.TRUE.equals( pluginUpdateOverride )
                     || ( !Boolean.FALSE.equals( pluginUpdateOverride ) && shouldCheckForUpdates( groupId, artifactId ) ) )
                 {
-                    updatedVersion = resolveReleaseVersion( groupId, artifactId, project
-                        .getPluginArtifactRepositories(), localRepository );
+                    updatedVersion = resolveMetaVersion( groupId, artifactId, project
+                        .getPluginArtifactRepositories(), localRepository, ReleaseArtifactTransformation.RELEASE_VERSION );
 
                     if ( StringUtils.isNotEmpty( updatedVersion ) && !updatedVersion.equals( version ) )
                     {
@@ -115,26 +121,45 @@
                         else
                         {
                             getLogger()
-                                .info( "Plugin {" + constructPluginKey( groupId, artifactId ) + "} has updates." );
+                                .info( "Plugin \'" + constructPluginKey( groupId, artifactId ) + "\' has updates." );
                         }
                     }
                 }
             }
         }
+        
+        boolean forcePersist = false;
+
+        // third pass...retrieve the version for RELEASE and also set that resolved version as the <useVersion/> 
+        // in settings.xml.
+        if ( StringUtils.isEmpty( version ) )
+        {
+            // 1. resolve the version to be used
+            version = resolveMetaVersion( groupId, artifactId, project.getPluginArtifactRepositories(),
+                                             localRepository, ReleaseArtifactTransformation.RELEASE_VERSION );
+
+            // 2. Set the updatedVersion so the user will be prompted whether to make this version permanent.
+            updatedVersion = version;
+
+            // 3. Persist this version without prompting.
+            forcePersist = true;
+            promptToPersist = false;
+        }
 
-        // final pass...retrieve the version for RELEASE and also set that resolved version as the <useVersion/> 
+        // final pass...retrieve the version for LATEST and also set that resolved version as the <useVersion/> 
         // in settings.xml.
         if ( StringUtils.isEmpty( version ) )
         {
-            // 1. resolve the version to be used THIS TIME
-            version = resolveReleaseVersion( groupId, artifactId, project.getPluginArtifactRepositories(),
-                                             localRepository );
+            // 1. resolve the version to be used
+            version = resolveMetaVersion( groupId, artifactId, project.getPluginArtifactRepositories(),
+                                             localRepository, LatestArtifactTransformation.LATEST_VERSION );
 
             // 2. Set the updatedVersion so the user will be prompted whether to make this version permanent.
             updatedVersion = version;
 
-            // 3. Tell the system to determine whether this update can/should be persisted.
-            promptToPersist = true;
+            // 3. Persist this version without prompting.
+            forcePersist = true;
+            promptToPersist = false;
         }
 
         // if we still haven't found a version, then fail early before we get into the update goop.
@@ -160,6 +185,11 @@
         }
 
         // We should persist by default if:
+        //
+        // 0. RELEASE or LATEST was used to resolve the plugin version (it's not in the registry)
+        //
+        // -OR-
+        //
         // 1. we detected a change in the plugin version from what was in the registry, or
         //      a. the plugin is not registered
         // 2. the pluginUpdateOverride flag has NOT been set to Boolean.FALSE (suppression mode)
@@ -167,13 +197,15 @@
         //      a. the registry is declared to be in autoUpdate mode
         //
         // NOTE: This is only the default value; it may be changed as the result of prompting the user.
-        boolean persistUpdate = promptToPersist && !Boolean.FALSE.equals( pluginUpdateOverride )
-            && ( inInteractiveMode || autoUpdate );
+        boolean persistUpdate = forcePersist || ( promptToPersist && !Boolean.FALSE.equals( pluginUpdateOverride )
+            && ( inInteractiveMode || autoUpdate ) );
 
         // retrieve the apply-to-all flag, if it's been set previously.
         Boolean applyToAll = settings.getRuntimeInfo().getApplyToAllPluginUpdates();
 
         // Incorporate interactive-mode CLI overrides, and previous decisions on apply-to-all, if appropriate.
+        //
+        // don't prompt if RELEASE or LATEST was used to resolve the plugin version
         // don't prompt if not in interactive mode.
         // don't prompt if the CLI pluginUpdateOverride is set (either suppression or force mode will stop prompting)
         // don't prompt if the user has selected ALL/NONE previously in this session
@@ -554,24 +586,28 @@
         return pluginRegistry;
     }
 
-    private String resolveReleaseVersion( String groupId, String artifactId, List remoteRepositories,
-                                         ArtifactRepository localRepository )
+    private String resolveMetaVersion( String groupId, String artifactId, List remoteRepositories,
+                                         ArtifactRepository localRepository, String metaVersionId )
         throws PluginVersionResolutionException
     {
-        Artifact releaseArtifact = artifactFactory.createArtifact( groupId, artifactId, "RELEASE",
-                                                                   Artifact.SCOPE_RUNTIME, "maven-plugin" );
-
+        Artifact artifact = artifactFactory.createArtifact( groupId, artifactId, metaVersionId,
+                                                                   Artifact.SCOPE_RUNTIME, "pom" );
+        
+        MavenMetadataSource metadataSource = new MavenMetadataSource( artifactResolver, projectBuilder, artifactFactory );
+        
+        String version = null;
         try
         {
-            artifactResolver.resolve( releaseArtifact, remoteRepositories, localRepository );
+            metadataSource.retrieve( artifact, localRepository, remoteRepositories );
+
+            version = artifact.getBaseVersion();
         }
-        catch ( ArtifactResolutionException e )
+        catch ( ArtifactMetadataRetrievalException e )
         {
-            throw new PluginVersionResolutionException( groupId, artifactId,
-                                                        "Cannot resolve RELEASE version of this plugin.", e );
+            getLogger().debug( "Failed to resolve " + metaVersionId + " version", e );
         }
-
-        return releaseArtifact.getBaseVersion();
+        
+        return version;
     }
 
 }

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=215919&r1=215918&r2=215919&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 11 21:13:40 2005
@@ -193,7 +193,7 @@
           <process-test-resources>resources:testResources</process-test-resources>
           <test-compile>compiler:testCompile</test-compile>
           <test>surefire:test</test>
-          <package>jar:jar,plugin:generateUpdatedMapping</package>
+          <package>jar:jar,plugin:generateUpdatedMapping,plugin:addPluginArtifactMetadata</package>
           <install>install:install,plugin:installMapping</install>
           <deploy>deploy:deploy,plugin:deployMapping</deploy>
         </phases>
@@ -285,6 +285,9 @@
       <implementation>org.apache.maven.plugin.version.DefaultPluginVersionManager</implementation>
       <instantiation-strategy>per-lookup</instantiation-strategy>
       <requirements>
+        <requirement>
+          <role>org.apache.maven.project.MavenProjectBuilder</role>
+        </requirement>
         <requirement>
           <role>org.apache.maven.plugin.registry.MavenPluginRegistryBuilder</role>
         </requirement>

Modified: maven/components/trunk/maven-plugins/maven-deploy-plugin/src/main/java/org/apache/maven/plugin/deploy/DeployMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-deploy-plugin/src/main/java/org/apache/maven/plugin/deploy/DeployMojo.java?rev=215919&r1=215918&r2=215919&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-deploy-plugin/src/main/java/org/apache/maven/plugin/deploy/DeployMojo.java (original)
+++ maven/components/trunk/maven-plugins/maven-deploy-plugin/src/main/java/org/apache/maven/plugin/deploy/DeployMojo.java Mon Jul 11 21:13:40 2005
@@ -17,8 +17,6 @@
  */
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.DefaultArtifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.deployer.ArtifactDeployer;
 import org.apache.maven.artifact.deployer.ArtifactDeploymentException;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
@@ -45,25 +43,11 @@
 {
 
     /**
-     * @parameter expression="${project.groupId}"
+     * @parameter expression="${project.artifact}"
      * @required
      * @readonly
      */
-    private String groupId;
-
-    /**
-     * @parameter expression="${project.artifactId}"
-     * @required
-     * @readonly
-     */
-    private String artifactId;
-
-    /**
-     * @parameter expression="${project.version}"
-     * @required
-     * @readonly
-     */
-    private String version;
+    private Artifact artifact;
 
     /**
      * @parameter expression="${project.packaging}"
@@ -121,13 +105,6 @@
     private List attachedArtifacts;
 
     /**
-     * @parameter expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}"
-     * @required
-     * @readonly
-     */
-    private ArtifactFactory artifactFactory;
-
-    /**
      * @parameter expression="${updateReleaseInfo}"
      */
     private boolean updateReleaseInfo = false;
@@ -143,9 +120,6 @@
         }
 
         // Deploy the POM
-        // TODO: maybe not strictly correct, while we should enfore that packaging has a type handler of the same id, we don't
-        Artifact artifact = artifactFactory.createArtifact( groupId, artifactId, version, null, packaging );
-
         boolean isPomArtifact = "pom".equals( packaging );
         File pom = new File( parentDir, "pom.xml" );
         if ( !isPomArtifact )

Modified: maven/components/trunk/maven-plugins/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallMojo.java?rev=215919&r1=215918&r2=215919&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallMojo.java (original)
+++ maven/components/trunk/maven-plugins/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallMojo.java Mon Jul 11 21:13:40 2005
@@ -17,8 +17,6 @@
  */
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.DefaultArtifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.installer.ArtifactInstallationException;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.metadata.ReleaseArtifactMetadata;
@@ -40,27 +38,6 @@
     extends AbstractInstallMojo
 {
     /**
-     * @parameter expression="${project.groupId}"
-     * @required
-     * @readonly
-     */
-    protected String groupId;
-
-    /**
-     * @parameter expression="${project.artifactId}"
-     * @required
-     * @readonly
-     */
-    protected String artifactId;
-
-    /**
-     * @parameter expression="${project.version}"
-     * @required
-     * @readonly
-     */
-    protected String version;
-
-    /**
      * @parameter expression="${project.packaging}"
      * @required
      * @readonly
@@ -91,28 +68,26 @@
      * @parameter expression="${updateReleaseInfo}"
      */
     private boolean updateReleaseInfo = false;
-
+    
     /**
-     * @parameter expression="${project.attachedArtifacts}
+     * @parameter expression="${project.artifact}"
      * @required
      * @readonly
      */
-    private List attachedArtifacts;
+    private Artifact artifact;
 
     /**
-     * @parameter expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}"
+     * @parameter expression="${project.attachedArtifacts}
      * @required
      * @readonly
      */
-    private ArtifactFactory artifactFactory;
+    private List attachedArtifacts;
 
     public void execute()
         throws MojoExecutionException
     {
-        // TODO: maybe not strictly correct, while we should enfore that packaging has a type handler of the same id, we don't
-        Artifact artifact = artifactFactory.createArtifact( groupId, artifactId, version, null, packaging );
-
         boolean isPomArtifact = "pom".equals( packaging );
+        
         File pom = new File( basedir, "pom.xml" );
         if ( !isPomArtifact )
         {
@@ -126,7 +101,7 @@
             metadata.setVersion( artifact.getVersion() );
             artifact.addMetadata( metadata );
         }
-
+        
         try
         {
             if ( isPomArtifact )

Modified: maven/components/trunk/maven-plugins/maven-plugin-plugin/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-plugin-plugin/pom.xml?rev=215919&r1=215918&r2=215919&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-plugin-plugin/pom.xml (original)
+++ maven/components/trunk/maven-plugins/maven-plugin-plugin/pom.xml Mon Jul 11 21:13:40 2005
@@ -36,6 +36,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
+      <artifactId>maven-core</artifactId>
+      <version>2.0-beta-1-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
       <artifactId>maven-project</artifactId>
       <version>2.0-beta-1-SNAPSHOT</version>
     </dependency>

Added: maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/AddPluginArtifactMetadataMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/AddPluginArtifactMetadataMojo.java?rev=215919&view=auto
==============================================================================
--- maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/AddPluginArtifactMetadataMojo.java (added)
+++ maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/AddPluginArtifactMetadataMojo.java Mon Jul 11 21:13:40 2005
@@ -0,0 +1,37 @@
+package org.apache.maven.plugin.plugin.metadata;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.LatestArtifactMetadata;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+
+/** Inject any plugin-specific artifact metadata to the project's artifact, for subsequent installation
+ *  and deployment. The first use-case for this is to add the LATEST metadata (which is plugin-specific)
+ *  for shipping alongside the plugin's artifact.
+ *  
+ * @phase package
+ * @goal addPluginArtifactMetadata
+ */
+public class AddPluginArtifactMetadataMojo
+    extends AbstractMojo
+{
+    
+    /** The project artifact, which should have the LATEST metadata added to it.
+     * 
+     * @parameter expression="${project.artifact}"
+     * @required
+     * @readonly
+     */
+    private Artifact projectArtifact;
+
+    public void execute()
+        throws MojoExecutionException
+    {
+        LatestArtifactMetadata metadata = new LatestArtifactMetadata( projectArtifact );
+        
+        metadata.setVersion( projectArtifact.getVersion() );
+        
+        projectArtifact.addMetadata( metadata );
+    }
+
+}

Propchange: maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/AddPluginArtifactMetadataMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/AddPluginArtifactMetadataMojo.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=215919&r1=215918&r2=215919&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Mon Jul 11 21:13:40 2005
@@ -143,9 +143,8 @@
         // ----------------------------------------------------------------------
 
         // TODO: such a call in MavenMetadataSource too - packaging not really the intention of type
-        Artifact projectArtifact = artifactFactory.createArtifact( project.getGroupId(), project.getArtifactId(),
-                                                                   project.getVersion(), null, project.getPackaging() );
-
+        Artifact projectArtifact = project.getArtifact();
+        
         Map managedVersions = createManagedVersionMap( project.getDependencyManagement() );
         ArtifactResolutionResult result = artifactResolver.resolveTransitively( project.getDependencyArtifacts(),
                                                                                 projectArtifact, managedVersions,
@@ -406,6 +405,12 @@
         project.addProfileProperties( profileProperties );
 
         project.setActiveProfiles( activeProfiles );
+        
+        // TODO: maybe not strictly correct, while we should enfore that packaging has a type handler of the same id, we don't
+        Artifact projectArtifact = artifactFactory.createArtifact( project.getGroupId(), project.getArtifactId(),
+                                                                   project.getVersion(), null, project.getPackaging() );
+        
+        project.setArtifact( projectArtifact );
 
         project.setPluginArtifactRepositories(
             ProjectUtils.buildArtifactRepositories( model.getPluginRepositories(), artifactRepositoryFactory,

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=215919&r1=215918&r2=215919&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java Mon Jul 11 21:13:40 2005
@@ -102,6 +102,8 @@
     private List activeProfiles = new ArrayList();
 
     private Set dependencyArtifacts;
+    
+    private Artifact artifact;
 
     public MavenProject( Model model )
     {
@@ -143,6 +145,16 @@
     // ----------------------------------------------------------------------
     // Accessors
     // ----------------------------------------------------------------------
+    
+    public Artifact getArtifact()
+    {
+        return artifact;
+    }
+    
+    public void setArtifact( Artifact artifact )
+    {
+        this.artifact = artifact;
+    }
 
     //@todo I would like to get rid of this. jvz.
     public Model getModel()



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