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/13 23:57:58 UTC
svn commit: r216273 - in /maven/components/trunk:
maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/
maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/
maven-core/src/main/java/org/apache/maven/life...
Author: jdcasey
Date: Wed Jul 13 14:57:57 2005
New Revision: 216273
URL: http://svn.apache.org/viewcvs?rev=216273&view=rev
Log:
Working on: MNG-576
o Implemented plan from my comments on MNG-576 for looking up lifecycle mappings within plugins.
o Fixed subtle bug in DefaultWagonManager for verifying checksums, where the destination file was being used to verify the checksum rather than the recently download temp destination.
o Fixed the DefaultRepositoryMetadataManager.resolve(..) method to allow the locally-installed metadata to be used if it is newer than the one resolved from the repository.
o Moved the lifecycle mappings for the EJB and WAR plugins out to META-INF/plexus/components.xml in the respective plugin's src/main/resources directory. it0016 and it0017 still pass.
o Changed the distributionManagement repository for maven-plugins/pom.xml to have id of 'central-plugins' and then added a normal artifact repository definition for central-plugins to that pom, to allow locally-installed repository metadata for the plugins to be put in the right place (and these builds should have access to the central plugin repo anyway).
o Changed the DefaultPluginMappingBuilder to only warn when plugins.xml for a particular plugin group is missing.
Added:
maven/components/trunk/maven-plugins/maven-ejb-plugin/src/main/resources/
maven/components/trunk/maven-plugins/maven-ejb-plugin/src/main/resources/META-INF/
maven/components/trunk/maven-plugins/maven-ejb-plugin/src/main/resources/META-INF/plexus/
maven/components/trunk/maven-plugins/maven-ejb-plugin/src/main/resources/META-INF/plexus/components.xml (with props)
maven/components/trunk/maven-plugins/maven-war-plugin/src/main/resources/
maven/components/trunk/maven-plugins/maven-war-plugin/src/main/resources/META-INF/
maven/components/trunk/maven-plugins/maven-war-plugin/src/main/resources/META-INF/plexus/
maven/components/trunk/maven-plugins/maven-war-plugin/src/main/resources/META-INF/plexus/components.xml (with props)
Modified:
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.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/PluginMappingManager.java
maven/components/trunk/maven-plugin-mapping/src/main/mdo/plugins.mdo
maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/GenerateUpdatedMappingMojo.java
maven/components/trunk/maven-plugins/pom.xml
Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java?rev=216273&r1=216272&r2=216273&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java Wed Jul 13 14:57:57 2005
@@ -337,7 +337,7 @@
// try to verify the SHA-1 checksum for this file.
try
{
- verifyChecksum( sha1ChecksumObserver, destination, remotePath, ".sha1", wagon );
+ verifyChecksum( sha1ChecksumObserver, temp, remotePath, ".sha1", wagon );
}
catch ( WagonException sha1TryException )
{
@@ -364,7 +364,7 @@
{
try
{
- verifyChecksum( md5ChecksumObserver, destination, remotePath, ".md5", wagon );
+ verifyChecksum( md5ChecksumObserver, temp, remotePath, ".md5", wagon );
}
catch ( WagonException md5TryException )
{
@@ -386,7 +386,7 @@
// otherwise, this was a failed transfer, and we don't want to retry.
else
{
- handleChecksumFailure( repository, "Error retrieving checksum file for " + destination,
+ handleChecksumFailure( repository, "Error retrieving checksum file for " + remotePath,
md5TryException );
}
}
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=216273&r1=216272&r2=216273&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 Wed Jul 13 14:57:57 2005
@@ -21,12 +21,12 @@
private WagonManager wagonManager;
// only resolve repository metadata once per session...
- private Map resolved = new HashMap();
+ private Map cachedMetadata = new HashMap();
public void resolve( RepositoryMetadata metadata, ArtifactRepository remote, ArtifactRepository local )
throws RepositoryMetadataManagementException
{
- File metadataFile = (File) resolved.get( metadata.getRepositoryPath() );
+ File metadataFile = (File) cachedMetadata.get( metadata.getRepositoryPath() );
if ( metadataFile == null )
{
@@ -41,8 +41,39 @@
{
try
{
- wagonManager.getRepositoryMetadata( metadata, remote, metadataFile );
-
+ File tempMetadataFile = File.createTempFile( "plugins.xml", null );
+
+ try
+ {
+ wagonManager.getRepositoryMetadata( metadata, remote, tempMetadataFile );
+
+ if( !metadataFile.exists() || ( metadataFile.lastModified() <= tempMetadataFile.lastModified() ) )
+ {
+ if ( !tempMetadataFile.renameTo( metadataFile ) )
+ {
+ FileUtils.copyFile( tempMetadataFile, metadataFile );
+
+ tempMetadataFile.delete();
+ }
+ }
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ if ( !metadataFile.exists() )
+ {
+ 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 )
@@ -50,10 +81,9 @@
throw new RepositoryMetadataManagementException( metadata,
"Failed to download repository metadata.", e );
}
- catch ( ResourceDoesNotExistException e )
+ catch ( IOException e )
{
- throw new RepositoryMetadataManagementException( metadata, "Remote repository metadata not found.",
- e );
+ throw new RepositoryMetadataManagementException( metadata, "Error constructing temporary metadata download file.", e );
}
}
}
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=216273&r1=216272&r2=216273&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 Wed Jul 13 14:57:57 2005
@@ -255,23 +255,11 @@
private Map bindLifecycleForPackaging( MavenSession session, String selectedPhase, MavenProject project )
throws ArtifactResolutionException, LifecycleExecutionException
{
- Map mappings;
- String packaging = project.getPackaging();
- try
- {
- LifecycleMapping m = (LifecycleMapping) session.lookup( LifecycleMapping.ROLE, packaging );
- mappings = m.getPhases();
- }
- catch ( ComponentLookupException e )
- {
- getLogger().error( "No lifecycle mapping for type '" + packaging + "': using defaults" );
- mappings = defaultPhases;
- }
+ Map mappings = findMappingsForLifecycle( session, project );
Map lifecycleMappings = new HashMap();
- boolean finished = false;
- for ( Iterator i = phases.iterator(); i.hasNext() && !finished; )
+ for ( Iterator i = phases.iterator(); i.hasNext(); )
{
String phase = (String) i.next();
@@ -291,13 +279,114 @@
if ( phase.equals( selectedPhase ) )
{
- finished = true;
+ break;
}
}
return lifecycleMappings;
}
+ private Map findMappingsForLifecycle( MavenSession session, MavenProject project )
+ throws LifecycleExecutionException
+ {
+ Map mappings;
+
+ String packaging = project.getPackaging();
+ try
+ {
+ PluginMappingManager mappingManager = getPluginMappingManager( session, project );
+
+ Plugin pluginContainingLifecycleMapping = mappingManager.getByPackaging( packaging );
+
+ LifecycleMapping m = null;
+
+ if ( pluginContainingLifecycleMapping != null )
+ {
+ try
+ {
+ pluginManager.verifyPlugin( pluginContainingLifecycleMapping, project, session.getSettings(), session.getLocalRepository() );
+
+ m = (LifecycleMapping) pluginManager.getPluginComponent( pluginContainingLifecycleMapping,
+ LifecycleMapping.ROLE, packaging );
+
+ mappings = m.getPhases();
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new LifecycleExecutionException( "Plugin: " + pluginContainingLifecycleMapping.getKey()
+ + " declares lifecycle mapping for: \'" + packaging
+ + "\', but does not appear to contain the actual mapping among its component descriptors.", e );
+ }
+ }
+ else
+ {
+ try
+ {
+ m = (LifecycleMapping) session.lookup( LifecycleMapping.ROLE, packaging );
+
+ mappings = m.getPhases();
+ }
+ catch ( ComponentLookupException e )
+ {
+ getLogger().warn(
+ "Lifecycle mappings not found for packaging: \'" + packaging
+ + "\'. Using defaults." );
+
+ getLogger().debug( "Lifecycle mappings not found for packaging: \'" + packaging + "\'.", e );
+
+ mappings = defaultPhases;
+ }
+ }
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ throw new LifecycleExecutionException( "Cannot load plugin which defines lifecycle mappings for: \'" + packaging + "\'.", e );
+ }
+ catch ( PluginVersionResolutionException e )
+ {
+ throw new LifecycleExecutionException( "Cannot load plugin which defines lifecycle mappings for: \'" + packaging + "\'.", e );
+ }
+ catch ( PluginManagerException e )
+ {
+ throw new LifecycleExecutionException( "Cannot load lifecycle mappings.", e );
+ }
+
+ return mappings;
+ }
+
+ private PluginMappingManager getPluginMappingManager( MavenSession session, MavenProject project )
+ throws LifecycleExecutionException
+ {
+ 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 LifecycleExecutionException( "Cannot load plugin mappings.", e );
+ }
+ catch ( PluginMappingManagementException e )
+ {
+ throw new LifecycleExecutionException( "Cannot load plugin mappings.", e );
+ }
+ }
+
+ return mappingManager;
+ }
+
/**
* Take each mojo contained with a plugin, look to see whether it contributes to a
* phase in the lifecycle and if it does place it at the end of the list of goals
@@ -482,11 +571,11 @@
// Steps for retrieving the plugin model instance:
// 1. request directly from the plugin collector by prefix
pluginDescriptor = pluginManager.getPluginDescriptorForPrefix( prefix );
-
+
if ( pluginDescriptor != null )
{
plugin = new Plugin();
-
+
plugin.setGroupId( pluginDescriptor.getGroupId() );
plugin.setArtifactId( pluginDescriptor.getArtifactId() );
plugin.setVersion( pluginDescriptor.getVersion() );
@@ -495,32 +584,7 @@
// 2. use the plugin resolver to resolve the prefix in the search groups
if ( plugin == null )
{
- 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 LifecycleExecutionException( "Cannot load plugin mappings.", e );
- }
- catch ( PluginMappingManagementException e )
- {
- throw new LifecycleExecutionException( "Cannot load plugin mappings.", e );
- }
- }
+ PluginMappingManager mappingManager = getPluginMappingManager( session, project );
plugin = mappingManager.getByPrefix( prefix );
}
@@ -547,7 +611,7 @@
else if ( numTokens == 4 )
{
plugin = new Plugin();
-
+
plugin.setGroupId( tok.nextToken() );
plugin.setArtifactId( tok.nextToken() );
plugin.setVersion( tok.nextToken() );
@@ -592,7 +656,7 @@
private void injectHandlerPluginConfiguration( MavenProject project, Plugin plugin )
{
String key = plugin.getKey();
-
+
Plugin buildPlugin = (Plugin) project.getBuild().getPluginsAsMap().get( key );
if ( buildPlugin == null )
@@ -601,7 +665,7 @@
if ( pluginManagement != null )
{
Plugin managedPlugin = (Plugin) pluginManagement.getPluginsAsMap().get( key );
-
+
if ( managedPlugin != null )
{
modelDefaultsInjector.mergePluginWithDefaults( plugin, managedPlugin );
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=216273&r1=216272&r2=216273&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 Wed Jul 13 14:57:57 2005
@@ -914,4 +914,14 @@
}
}
+ public Object getPluginComponent( Plugin plugin, String role, String roleHint )
+ throws ComponentLookupException, PluginManagerException
+ {
+ PluginDescriptor pluginDescriptor = pluginCollector.getPluginDescriptor( plugin );
+
+ PlexusContainer pluginContainer = getPluginContainer( pluginDescriptor );
+
+ return pluginContainer.lookup( role, roleHint );
+ }
+
}
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=216273&r1=216272&r2=216273&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 Wed Jul 13 14:57:57 2005
@@ -26,6 +26,7 @@
import org.apache.maven.model.Plugin;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.model.ReportSet;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import java.util.List;
@@ -50,4 +51,7 @@
ArtifactRepository localRepository )
throws PluginManagerException, PluginVersionResolutionException, PluginConfigurationException,
ArtifactResolutionException;
+
+ Object getPluginComponent( Plugin plugin, String role, String roleHint )
+ throws ComponentLookupException, PluginManagerException;
}
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=216273&r1=216272&r2=216273&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 Wed Jul 13 14:57:57 2005
@@ -201,46 +201,6 @@
</configuration>
</component>
- <component>
- <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
- <role-hint>ejb</role-hint>
- <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
- <configuration>
- <!-- START SNIPPET: ejb-lifecycle -->
- <phases>
- <process-resources>resources:resources</process-resources>
- <compile>compiler:compile</compile>
- <process-test-resources>resources:testResources</process-test-resources>
- <test-compile>compiler:testCompile</test-compile>
- <test>surefire:test</test>
- <package>ejb:ejb,source:jar</package>
- <install>install:install</install>
- <deploy>deploy:deploy</deploy>
- </phases>
- <!-- END SNIPPET: ejb-lifecycle -->
- </configuration>
- </component>
-
- <component>
- <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
- <role-hint>war</role-hint>
- <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
- <configuration>
- <!-- START SNIPPET: war-lifecycle -->
- <phases>
- <process-resources>resources:resources</process-resources>
- <compile>compiler:compile</compile>
- <process-test-resources>resources:testResources</process-test-resources>
- <test-compile>compiler:testCompile</test-compile>
- <test>surefire:test</test>
- <package>war:war</package>
- <install>install:install</install>
- <deploy>deploy:deploy</deploy>
- </phases>
- <!-- END SNIPPET: war-lifecycle -->
- </configuration>
- </component>
-
<!-- TODO: move to the plexus plugin -->
<component>
<role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
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=216273&r1=216272&r2=216273&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 Wed Jul 13 14:57:57 2005
@@ -5,6 +5,7 @@
import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
import org.apache.maven.plugin.mapping.io.xpp3.PluginMappingXpp3Reader;
import org.apache.maven.plugin.mapping.metadata.PluginMappingMetadata;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@@ -12,20 +13,29 @@
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
+import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class DefaultPluginMappingBuilder
+ extends AbstractLogEnabled
implements MavenPluginMappingBuilder
{
// component requirement
private RepositoryMetadataManager repositoryMetadataManager;
- public PluginMappingManager loadPluginMappings( List pluginGroupIds, List pluginRepositories,
+ public PluginMappingManager loadPluginMappings( List groupIds, List pluginRepositories,
ArtifactRepository localRepository )
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 )
@@ -34,13 +44,22 @@
{
String groupId = (String) it.next();
- File mappingFile = resolveMappingMetadata( groupId, pluginRepositories, localRepository );
+ try
+ {
+ File mappingFile = resolveMappingMetadata( groupId, pluginRepositories, localRepository );
+
+ PluginMap pluginMap = readPluginMap( mappingFile );
- PluginMap pluginMap = readPluginMap( mappingFile );
-
- if ( pluginMap != null )
+ if ( pluginMap != null )
+ {
+ mappingManager.addPluginMap( pluginMap );
+ }
+ }
+ catch ( RepositoryMetadataManagementException e )
{
- mappingManager.addPluginMap( pluginMap );
+ getLogger().warn( "Cannot resolve plugin-mapping metadata for groupId: " + groupId + " - IGNORING." );
+
+ getLogger().debug( "Error resolving plugin-mapping metadata for groupId: " + groupId + ".", e );
}
}
}
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=216273&r1=216272&r2=216273&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 Wed Jul 13 14:57:57 2005
@@ -14,6 +14,7 @@
private List mappings = new ArrayList();
private Map pluginDefinitionsByPrefix = new HashMap();
+ private Map pluginDefinitionsByPackaging = new HashMap();
public void addPluginMap( PluginMap pluginMap )
{
@@ -21,6 +22,7 @@
// flush the cache.
pluginDefinitionsByPrefix = null;
+ pluginDefinitionsByPackaging = null;
}
public Plugin getByPrefix( String pluginPrefix )
@@ -34,6 +36,51 @@
}
return (Plugin) pluginDefinitionsByPrefix.get( pluginPrefix );
+ }
+
+ public Plugin getByPackaging( String packaging )
+ {
+ synchronized ( this )
+ {
+ if ( pluginDefinitionsByPackaging == null )
+ {
+ calculatePluginDefinitionsByPackaging();
+ }
+ }
+
+ return (Plugin) pluginDefinitionsByPackaging.get( packaging );
+ }
+
+ private void calculatePluginDefinitionsByPackaging()
+ {
+ pluginDefinitionsByPackaging = new HashMap();
+
+ for ( Iterator it = mappings.iterator(); it.hasNext(); )
+ {
+ PluginMap pluginMap = (PluginMap) it.next();
+
+ String groupId = pluginMap.getGroupId();
+
+ for ( Iterator pluginIterator = pluginMap.getPlugins().iterator(); pluginIterator.hasNext(); )
+ {
+ MappedPlugin mapping = (MappedPlugin) pluginIterator.next();
+
+ String artifactId = mapping.getArtifactId();
+
+ Plugin plugin = new Plugin();
+
+ plugin.setGroupId( groupId );
+
+ plugin.setArtifactId( artifactId );
+
+ for ( Iterator packagingIterator = mapping.getPackagingHandlers().iterator(); packagingIterator.hasNext(); )
+ {
+ String packaging = (String) packagingIterator.next();
+
+ pluginDefinitionsByPackaging.put( packaging, plugin );
+ }
+ }
+ }
}
private void calculatePluginDefinitionsByPrefix()
Modified: maven/components/trunk/maven-plugin-mapping/src/main/mdo/plugins.mdo
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugin-mapping/src/main/mdo/plugins.mdo?rev=216273&r1=216272&r2=216273&view=diff
==============================================================================
--- maven/components/trunk/maven-plugin-mapping/src/main/mdo/plugins.mdo (original)
+++ maven/components/trunk/maven-plugin-mapping/src/main/mdo/plugins.mdo Wed Jul 13 14:57:57 2005
@@ -53,6 +53,15 @@
<version>1.0.0</version>
<description>The plugin artifactId</description>
</field>
+ <field>
+ <name>packagingHandlers</name>
+ <version>1.0.0</version>
+ <description>A list of the packaging types supported by this plugin.</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
</fields>
</class>
</classes>
Added: maven/components/trunk/maven-plugins/maven-ejb-plugin/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-ejb-plugin/src/main/resources/META-INF/plexus/components.xml?rev=216273&view=auto
==============================================================================
--- maven/components/trunk/maven-plugins/maven-ejb-plugin/src/main/resources/META-INF/plexus/components.xml (added)
+++ maven/components/trunk/maven-plugins/maven-ejb-plugin/src/main/resources/META-INF/plexus/components.xml Wed Jul 13 14:57:57 2005
@@ -0,0 +1,23 @@
+<component-set>
+ <components>
+ <component>
+ <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+ <role-hint>ejb</role-hint>
+ <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+ <configuration>
+ <!-- START SNIPPET: ejb-lifecycle -->
+ <phases>
+ <process-resources>resources:resources</process-resources>
+ <compile>compiler:compile</compile>
+ <process-test-resources>resources:testResources</process-test-resources>
+ <test-compile>compiler:testCompile</test-compile>
+ <test>surefire:test</test>
+ <package>ejb:ejb,source:jar</package>
+ <install>install:install</install>
+ <deploy>deploy:deploy</deploy>
+ </phases>
+ <!-- END SNIPPET: ejb-lifecycle -->
+ </configuration>
+ </component>
+ </components>
+</component-set>
Propchange: maven/components/trunk/maven-plugins/maven-ejb-plugin/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-plugins/maven-ejb-plugin/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/GenerateUpdatedMappingMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/GenerateUpdatedMappingMojo.java?rev=216273&r1=216272&r2=216273&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/GenerateUpdatedMappingMojo.java (original)
+++ maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/GenerateUpdatedMappingMojo.java Wed Jul 13 14:57:57 2005
@@ -4,6 +4,7 @@
import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManagementException;
import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
+import org.apache.maven.lifecycle.mapping.LifecycleMapping;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
@@ -14,6 +15,20 @@
import org.apache.maven.plugin.mapping.metadata.PluginMappingMetadata;
import org.apache.maven.project.MavenProject;
import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.codehaus.classworlds.ClassRealm;
+import org.codehaus.classworlds.ClassWorld;
+import org.codehaus.classworlds.DuplicateRealmException;
+import org.codehaus.plexus.component.discovery.ComponentDiscoverer;
+import org.codehaus.plexus.component.discovery.ComponentDiscovererManager;
+import org.codehaus.plexus.component.discovery.ComponentDiscoveryEvent;
+import org.codehaus.plexus.component.discovery.ComponentDiscoveryListener;
+import org.codehaus.plexus.component.discovery.DefaultComponentDiscoverer;
+import org.codehaus.plexus.component.discovery.PlexusXmlComponentDiscoverer;
+import org.codehaus.plexus.component.repository.ComponentDescriptor;
+import org.codehaus.plexus.component.repository.ComponentSetDescriptor;
+import org.codehaus.plexus.configuration.PlexusConfigurationException;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.DefaultContext;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@@ -23,6 +38,8 @@
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
+import java.net.MalformedURLException;
+import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -51,7 +68,14 @@
* @required
* @readonly
*/
- private String outputDirectory;
+ private String metadataDirectory;
+
+ /**
+ * @parameter expression="${project.build.outputDirectory}"
+ * @required
+ * @readonly
+ */
+ private String classesDirectory;
/**
* @parameter expression="${component.org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager}"
@@ -67,10 +91,11 @@
*/
private ArtifactRepository localRepository;
- public void execute() throws MojoExecutionException
+ public void execute()
+ throws MojoExecutionException
{
ArtifactRepository distributionRepository = project.getDistributionManagementArtifactRepository();
-
+
String distributionRepositoryId = distributionRepository.getId();
List remoteArtifactRepositories = project.getRemoteArtifactRepositories();
@@ -84,25 +109,25 @@
if ( distributionRepositoryId.equals( currentRepository.getId() ) )
{
readRemoteRepository = currentRepository;
-
+
break;
}
}
-
+
PluginMappingXpp3Reader mappingReader = new PluginMappingXpp3Reader();
-
+
PluginMap pluginMap = null;
-
+
RepositoryMetadata metadata = new PluginMappingMetadata( project.getGroupId() );
-
+
try
{
repositoryMetadataManager.resolve( metadata, readRemoteRepository, localRepository );
-
+
Reader reader = null;
-
+
File metadataFile = metadata.getFile();
-
+
try
{
reader = new FileReader( metadataFile );
@@ -125,12 +150,12 @@
catch ( RepositoryMetadataManagementException e )
{
Throwable cause = e.getCause();
-
+
if ( cause != null && ( cause instanceof ResourceDoesNotExistException ) )
{
getLog().info( "Cannot find " + metadata + " on remote repository. Creating a new one." );
getLog().debug( "Metadata " + metadata + " cannot be resolved.", e );
-
+
pluginMap = new PluginMap();
pluginMap.setGroupId( project.getGroupId() );
}
@@ -139,81 +164,177 @@
throw new MojoExecutionException( "Failed to resolve " + metadata, e );
}
}
-
- boolean prefixAlreadyMapped = false;
-
+
for ( Iterator it = pluginMap.getPlugins().iterator(); it.hasNext(); )
{
MappedPlugin preExisting = (MappedPlugin) it.next();
-
- if ( preExisting.getPrefix().equals( getGoalPrefix() ) )
+
+ if ( preExisting.getArtifactId().equals( project.getArtifactId() ) )
{
- prefixAlreadyMapped = true;
-
- if ( !preExisting.getArtifactId().equals( project.getArtifactId() ) )
- {
- // TODO: In this case, should we rather just replace the existing plugin mapping??
-
- throw new MojoExecutionException( "Cannot map plugin to it's prefix in plugins.xml metadata; the prefix: \'" + getGoalPrefix() + "\' is already mapped to: " + preExisting.getArtifactId() );
- }
- else
- {
- getLog().info( "NOT updating plugins.xml metadata; this plugin is already mapped." );
- }
-
+ getLog().info( "Updating pre-existing plugin-mapping metadata." );
+
+ pluginMap.removePlugin( preExisting );
+
break;
}
}
+
+ MappedPlugin mappedPlugin = new MappedPlugin();
+
+ mappedPlugin.setArtifactId( project.getArtifactId() );
+
+ mappedPlugin.setPrefix( getGoalPrefix() );
+
+ mappedPlugin.setPackagingHandlers( extractPackagingHandlers() );
+
+ pluginMap.addPlugin( mappedPlugin );
+
+ Writer writer = null;
+ try
+ {
+ File updatedMetadataFile = new File( metadataDirectory, metadata.getRepositoryPath() ).getAbsoluteFile();
+
+ File dir = updatedMetadataFile.getParentFile();
+
+ if ( !dir.exists() )
+ {
+ dir.mkdirs();
+ }
+
+ writer = new FileWriter( updatedMetadataFile );
+
+ PluginMappingXpp3Writer mappingWriter = new PluginMappingXpp3Writer();
+
+ mappingWriter.write( writer, pluginMap );
+
+ metadata.setFile( updatedMetadataFile );
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "Error writing repository metadata to build directory.", e );
+ }
+ finally
+ {
+ IOUtil.close( writer );
+ }
+ }
+
+ private List extractPackagingHandlers()
+ throws MojoExecutionException
+ {
+ List packagingHandlers = new ArrayList();
+
+ Context ctx = new DefaultContext();
+
+ ClassWorld discoveryWorld = new ClassWorld();
+
+ try
+ {
+ ClassRealm discoveryRealm = discoveryWorld.newRealm( "packageHandler-discovery" );
+
+ File classDir = new File( classesDirectory ).getAbsoluteFile();
+
+ discoveryRealm.addConstituent( classDir.toURL() );
+
+ packagingHandlers
+ .addAll( discoverLifecycleMappings( ctx, discoveryRealm, new DefaultComponentDiscoverer() ) );
+
+ packagingHandlers.addAll( discoverLifecycleMappings( ctx, discoveryRealm,
+ new PlexusXmlComponentDiscoverer() ) );
+ }
+ catch ( DuplicateRealmException e )
+ {
+ throw new MojoExecutionException( "Error constructing class-realm for lifecycle-mapping detection.", e );
+ }
+ catch ( MalformedURLException e )
+ {
+ throw new MojoExecutionException( "Error constructing class-realm for lifecycle-mapping detection.", e );
+ }
+ catch ( PlexusConfigurationException e )
+ {
+ throw new MojoExecutionException( "Error detecting lifecycle-mappings.", e );
+ }
+
+ return packagingHandlers;
+ }
+
+ private List discoverLifecycleMappings( Context ctx, ClassRealm discoveryRealm, ComponentDiscoverer discoverer )
+ throws PlexusConfigurationException
+ {
+ discoverer.setManager( new DummyComponentDiscovererManager() );
- if ( !prefixAlreadyMapped )
+ List packagingHandlers = new ArrayList();
+
+ List componentSetDescriptors = discoverer.findComponents( ctx, discoveryRealm );
+
+ if ( componentSetDescriptors != null )
{
- MappedPlugin mappedPlugin = new MappedPlugin();
-
- mappedPlugin.setArtifactId( project.getArtifactId() );
-
- mappedPlugin.setPrefix( getGoalPrefix() );
-
- pluginMap.addPlugin( mappedPlugin );
-
- Writer writer = null;
- try
+ for ( Iterator it = componentSetDescriptors.iterator(); it.hasNext(); )
{
- File updatedMetadataFile = new File( outputDirectory, metadata.getRepositoryPath() ).getAbsoluteFile();
+ ComponentSetDescriptor setDescriptor = (ComponentSetDescriptor) it.next();
- File dir = updatedMetadataFile.getParentFile();
+ List components = setDescriptor.getComponents();
- if ( !dir.exists() )
+ if ( components != null )
{
- dir.mkdirs();
+ for ( Iterator componentIterator = components.iterator(); componentIterator.hasNext(); )
+ {
+ ComponentDescriptor descriptor = (ComponentDescriptor) componentIterator.next();
+
+ if ( LifecycleMapping.ROLE.equals( descriptor.getRole() ) )
+ {
+ packagingHandlers.add( descriptor.getRoleHint() );
+ }
+ }
}
-
- writer = new FileWriter( updatedMetadataFile );
-
- PluginMappingXpp3Writer mappingWriter = new PluginMappingXpp3Writer();
-
- mappingWriter.write( writer, pluginMap );
-
- metadata.setFile( updatedMetadataFile );
- }
- catch ( IOException e )
- {
- throw new MojoExecutionException( "Error writing repository metadata to build directory.", e );
- }
- finally
- {
- IOUtil.close( writer );
}
}
+
+ return packagingHandlers;
}
-
+
private String getGoalPrefix()
{
if ( goalPrefix == null )
{
goalPrefix = PluginDescriptor.getGoalPrefixFromArtifactId( project.getArtifactId() );
}
-
+
return goalPrefix;
}
+ public static class DummyComponentDiscovererManager implements ComponentDiscovererManager
+ {
+
+ DummyComponentDiscovererManager()
+ {
+ }
+
+ public List getComponentDiscoverers()
+ {
+ return null;
+ }
+
+ public void registerComponentDiscoveryListener( ComponentDiscoveryListener listener )
+ {
+ }
+
+ public void removeComponentDiscoveryListener( ComponentDiscoveryListener listener )
+ {
+ }
+
+ public void fireComponentDiscoveryEvent( ComponentDiscoveryEvent event )
+ {
+ }
+
+ public void initialize()
+ {
+ }
+
+ public List getListenerDescriptors()
+ {
+ return null;
+ }
+
+ }
}
Added: maven/components/trunk/maven-plugins/maven-war-plugin/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-war-plugin/src/main/resources/META-INF/plexus/components.xml?rev=216273&view=auto
==============================================================================
--- maven/components/trunk/maven-plugins/maven-war-plugin/src/main/resources/META-INF/plexus/components.xml (added)
+++ maven/components/trunk/maven-plugins/maven-war-plugin/src/main/resources/META-INF/plexus/components.xml Wed Jul 13 14:57:57 2005
@@ -0,0 +1,23 @@
+<component-set>
+ <components>
+ <component>
+ <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+ <role-hint>war</role-hint>
+ <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+ <configuration>
+ <!-- START SNIPPET: war-lifecycle -->
+ <phases>
+ <process-resources>resources:resources</process-resources>
+ <compile>compiler:compile</compile>
+ <process-test-resources>resources:testResources</process-test-resources>
+ <test-compile>compiler:testCompile</test-compile>
+ <test>surefire:test</test>
+ <package>war:war</package>
+ <install>install:install</install>
+ <deploy>deploy:deploy</deploy>
+ </phases>
+ <!-- END SNIPPET: war-lifecycle -->
+ </configuration>
+ </component>
+ </components>
+</component-set>
Propchange: maven/components/trunk/maven-plugins/maven-war-plugin/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-plugins/maven-war-plugin/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: maven/components/trunk/maven-plugins/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/pom.xml?rev=216273&r1=216272&r2=216273&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/pom.xml (original)
+++ maven/components/trunk/maven-plugins/pom.xml Wed Jul 13 14:57:57 2005
@@ -71,8 +71,8 @@
</organization>
<distributionManagement>
<repository>
- <id>central</id>
- <name>Maven Central Repository</name>
+ <id>central-plugins</id>
+ <name>Maven Central Plugins Repository</name>
<url>scp://repo1.maven.org/home/projects/maven/repository-staging/to-ibiblio/maven2/plugins</url>
</repository>
<site>
@@ -80,6 +80,13 @@
<url>scp://minotaur.apache.org/www/maven.apache.org/maven2/plugins/</url>
</site>
</distributionManagement>
+ <repositories>
+ <repository>
+ <id>central-plugins</id>
+ <name>Maven Central Plugins Repository</name>
+ <url>scp://repo1.maven.org/home/projects/maven/repository-staging/to-ibiblio/maven2/plugins</url>
+ </repository>
+ </repositories>
<modules>
<module>maven-ant-plugin</module>
<module>maven-assembly-plugin</module>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org