[MNG-2228] put extensions in a child container. This guarantees separation avoiding root classloader pollution that was causing plugins such as the release plugin to fail when using wagon-webdav.

Merged from: r492068, maven-2.0.x branch


git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@492071 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Brett Leslie Porter 2007-01-03 07:59:08 +00:00
parent 51c6fefb31
commit 3d073bd7d3
8 changed files with 119 additions and 55 deletions

View File

@ -53,6 +53,7 @@ import org.codehaus.plexus.util.xml.Xpp3Dom;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@ -89,6 +90,9 @@ public class DefaultWagonManager
private boolean interactive = true; private boolean interactive = true;
private Map availableWagons = new HashMap();
// TODO: this leaks the component in the public api - it is never released back to the container
public Wagon getWagon( Repository repository ) public Wagon getWagon( Repository repository )
throws UnsupportedProtocolException, WagonConfigurationException throws UnsupportedProtocolException, WagonConfigurationException
{ {
@ -109,26 +113,39 @@ public class DefaultWagonManager
public Wagon getWagon( String protocol ) public Wagon getWagon( String protocol )
throws UnsupportedProtocolException throws UnsupportedProtocolException
{ {
Wagon wagon; PlexusContainer container = getWagonContainer( protocol );
Wagon wagon;
try try
{ {
wagon = (Wagon) container.lookup( Wagon.ROLE, protocol ); wagon = (Wagon) container.lookup( Wagon.ROLE, protocol );
wagon.setInteractive( interactive );
} }
catch ( ComponentLookupException e ) catch ( ComponentLookupException e1 )
{ {
throw new UnsupportedProtocolException( throw new UnsupportedProtocolException(
"Cannot find wagon which supports the requested protocol: " + protocol, e ); "Cannot find wagon which supports the requested protocol: " + protocol, e1 );
} }
wagon.setInteractive( interactive );
return wagon; return wagon;
} }
public void putArtifact( File source, Artifact artifact, ArtifactRepository repository ) private PlexusContainer getWagonContainer( String protocol )
{
PlexusContainer container = this.container;
if ( availableWagons.containsKey( protocol ) )
{
container = (PlexusContainer) availableWagons.get( protocol );
}
return container;
}
public void putArtifact( File source, Artifact artifact, ArtifactRepository deploymentRepository )
throws TransferFailedException throws TransferFailedException
{ {
putRemoteFile( repository, source, repository.pathOf( artifact ), downloadMonitor ); putRemoteFile( deploymentRepository, source, deploymentRepository.pathOf( artifact ), downloadMonitor );
} }
public void putArtifactMetadata( File source, ArtifactMetadata artifactMetadata, ArtifactRepository repository ) public void putArtifactMetadata( File source, ArtifactMetadata artifactMetadata, ArtifactRepository repository )
@ -248,7 +265,7 @@ public class DefaultWagonManager
{ {
disconnectWagon( wagon ); disconnectWagon( wagon );
releaseWagon( wagon ); releaseWagon( protocol, wagon );
} }
} }
@ -331,8 +348,6 @@ public class DefaultWagonManager
failIfNotOnline(); failIfNotOnline();
Wagon wagon;
ArtifactRepository mirror = getMirror( repository.getId() ); ArtifactRepository mirror = getMirror( repository.getId() );
if ( mirror != null ) if ( mirror != null )
{ {
@ -342,6 +357,7 @@ public class DefaultWagonManager
} }
String protocol = repository.getProtocol(); String protocol = repository.getProtocol();
Wagon wagon;
try try
{ {
wagon = getWagon( protocol ); wagon = getWagon( protocol );
@ -507,7 +523,7 @@ public class DefaultWagonManager
{ {
disconnectWagon( wagon ); disconnectWagon( wagon );
releaseWagon( wagon ); releaseWagon( protocol, wagon );
} }
if ( downloaded ) if ( downloaded )
@ -631,8 +647,9 @@ public class DefaultWagonManager
} }
} }
private void releaseWagon( Wagon wagon ) private void releaseWagon( String protocol, Wagon wagon )
{ {
PlexusContainer container = getWagonContainer( protocol );
try try
{ {
container.release( wagon ); container.release( wagon );
@ -765,6 +782,13 @@ public class DefaultWagonManager
this.interactive = interactive; this.interactive = interactive;
} }
public void registerWagons( Collection wagons, PlexusContainer extensionContainer )
{
for ( Iterator i = wagons.iterator(); i.hasNext(); )
{
availableWagons.put( i.next(), extensionContainer );
}
}
/** /**
* Applies the server configuration to the wagon * Applies the server configuration to the wagon

View File

@ -27,14 +27,16 @@ import org.apache.maven.wagon.authentication.AuthenticationInfo;
import org.apache.maven.wagon.events.TransferListener; import org.apache.maven.wagon.events.TransferListener;
import org.apache.maven.wagon.proxy.ProxyInfo; import org.apache.maven.wagon.proxy.ProxyInfo;
import org.apache.maven.wagon.repository.Repository; import org.apache.maven.wagon.repository.Repository;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.util.xml.Xpp3Dom; import org.codehaus.plexus.util.xml.Xpp3Dom;
import java.io.File; import java.io.File;
import java.util.Collection;
import java.util.List; import java.util.List;
/** /**
* Manages <a href="http://maven.apache.org/wagon">Wagon</a> related operations in Maven. * Manages <a href="http://maven.apache.org/wagon">Wagon</a> related operations in Maven.
* *
* @author <a href="michal.maczka@dimatics.com">Michal Maczka </a> * @author <a href="michal.maczka@dimatics.com">Michal Maczka </a>
* @version $Id$ * @version $Id$
*/ */
@ -45,12 +47,11 @@ public interface WagonManager
/** /**
* Get a Wagon provider that understands the protocol passed as argument. * Get a Wagon provider that understands the protocol passed as argument.
* It doesn't configure the Wagon. * It doesn't configure the Wagon.
* *
* @deprecated prone to errors. use {@link #getWagon(Repository)} instead.
*
* @param protocol the protocol the {@link Wagon} will handle * @param protocol the protocol the {@link Wagon} will handle
* @return the {@link Wagon} instance able to handle the protocol provided * @return the {@link Wagon} instance able to handle the protocol provided
* @throws UnsupportedProtocolException if there is no provider able to handle the protocol * @throws UnsupportedProtocolException if there is no provider able to handle the protocol
* @deprecated prone to errors. use {@link #getWagon(Repository)} instead.
*/ */
Wagon getWagon( String protocol ) Wagon getWagon( String protocol )
throws UnsupportedProtocolException; throws UnsupportedProtocolException;
@ -58,11 +59,11 @@ public interface WagonManager
/** /**
* Get a Wagon provider for the provided repository. * Get a Wagon provider for the provided repository.
* It will configure the Wagon for that repository. * It will configure the Wagon for that repository.
* *
* @param repository the repository * @param repository the repository
* @return the {@link Wagon} instance that can be used to connect to the repository * @return the {@link Wagon} instance that can be used to connect to the repository
* @throws UnsupportedProtocolException if there is no provider able to handle the protocol * @throws UnsupportedProtocolException if there is no provider able to handle the protocol
* @throws WagonConfigurationException if the wagon can't be configured for the repository * @throws WagonConfigurationException if the wagon can't be configured for the repository
*/ */
Wagon getWagon( Repository repository ) Wagon getWagon( Repository repository )
throws UnsupportedProtocolException, WagonConfigurationException; throws UnsupportedProtocolException, WagonConfigurationException;
@ -82,9 +83,9 @@ public interface WagonManager
void getArtifactMetadata( ArtifactMetadata metadata, ArtifactRepository remoteRepository, File destination, void getArtifactMetadata( ArtifactMetadata metadata, ArtifactRepository remoteRepository, File destination,
String checksumPolicy ) String checksumPolicy )
throws TransferFailedException, ResourceDoesNotExistException; throws TransferFailedException, ResourceDoesNotExistException;
void setOnline( boolean online ); void setOnline( boolean online );
boolean isOnline(); boolean isOnline();
void addProxy( String protocol, String host, int port, String username, String password, String nonProxyHosts ); void addProxy( String protocol, String host, int port, String username, String password, String nonProxyHosts );
@ -103,12 +104,14 @@ public interface WagonManager
AuthenticationInfo getAuthenticationInfo( String id ); AuthenticationInfo getAuthenticationInfo( String id );
/** /**
* Set the configuration for a repository * Set the configuration for a repository
* *
* @param repositoryId id of the repository to set the configuration to * @param repositoryId id of the repository to set the configuration to
* @param configuration dom tree of the xml with the configuration for the {@link Wagon} * @param configuration dom tree of the xml with the configuration for the {@link Wagon}
*/ */
void addConfiguration( String repositoryId, Xpp3Dom configuration ); void addConfiguration( String repositoryId, Xpp3Dom configuration );
void setInteractive( boolean interactive ); void setInteractive( boolean interactive );
void registerWagons( Collection wagons, PlexusContainer extensionContainer );
} }

View File

@ -19,6 +19,7 @@ package org.apache.maven.extension;
import org.apache.maven.MavenArtifactFilterManager; import org.apache.maven.MavenArtifactFilterManager;
import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.artifact.manager.WagonManager;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource; import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
@ -26,21 +27,21 @@ import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolutionResult; import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter; import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
import org.apache.maven.model.Extension; import org.apache.maven.model.Extension;
import org.apache.maven.plugin.PluginManager;
import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProject;
import org.apache.maven.wagon.Wagon;
import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusConstants;
import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.PlexusContainerException; import org.codehaus.plexus.PlexusContainerException;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.context.Context; import org.codehaus.plexus.context.Context;
import org.codehaus.plexus.context.ContextException; import org.codehaus.plexus.context.ContextException;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.Map;
import java.util.ArrayList;
/** /**
* Used to locate extensions. * Used to locate extensions.
@ -50,6 +51,7 @@ import java.util.ArrayList;
* @version $Id$ * @version $Id$
*/ */
public class DefaultExtensionManager public class DefaultExtensionManager
extends AbstractLogEnabled
implements ExtensionManager, Contextualizable implements ExtensionManager, Contextualizable
{ {
private ArtifactResolver artifactResolver; private ArtifactResolver artifactResolver;
@ -58,15 +60,19 @@ public class DefaultExtensionManager
private PlexusContainer container; private PlexusContainer container;
private PluginManager pluginManager;
private ArtifactFilter artifactFilter = MavenArtifactFilterManager.createStandardFilter(); private ArtifactFilter artifactFilter = MavenArtifactFilterManager.createStandardFilter();
private WagonManager wagonManager;
private static final String CONTAINER_NAME = "extensions";
public void addExtension( Extension extension, MavenProject project, ArtifactRepository localRepository ) public void addExtension( Extension extension, MavenProject project, ArtifactRepository localRepository )
throws ArtifactResolutionException, PlexusContainerException, ArtifactNotFoundException throws ArtifactResolutionException, PlexusContainerException, ArtifactNotFoundException
{ {
String extensionId = ArtifactUtils.versionlessKey( extension.getGroupId(), extension.getArtifactId() ); String extensionId = ArtifactUtils.versionlessKey( extension.getGroupId(), extension.getArtifactId() );
getLogger().debug( "Initialising extension: " + extensionId );
Artifact artifact = (Artifact) project.getExtensionArtifactMap().get( extensionId ); Artifact artifact = (Artifact) project.getExtensionArtifactMap().get( extensionId );
if ( artifact != null ) if ( artifact != null )
@ -79,21 +85,53 @@ public class DefaultExtensionManager
project.getRemoteArtifactRepositories(), project.getRemoteArtifactRepositories(),
artifactMetadataSource, filter ); artifactMetadataSource, filter );
List excludedArtifacts = new ArrayList( result.getArtifacts().size() ); // create a child container for the extension
// TODO: this could surely be simpler/different on trunk with the new classworlds
PlexusContainer extensionContainer = getExtensionContainer();
if ( extensionContainer == null )
{
extensionContainer = container.createChildContainer( CONTAINER_NAME,
Collections.singletonList( artifact.getFile() ),
Collections.EMPTY_MAP );
}
for ( Iterator i = result.getArtifacts().iterator(); i.hasNext(); ) for ( Iterator i = result.getArtifacts().iterator(); i.hasNext(); )
{ {
Artifact a = (Artifact) i.next(); Artifact a = (Artifact) i.next();
excludedArtifacts.add( ArtifactUtils.versionlessKey( a ) );
a = project.replaceWithActiveArtifact( a ); a = project.replaceWithActiveArtifact( a );
container.addJarResource( a.getFile() ); getLogger().debug( "Adding to extension classpath: " + a.getFile() );
extensionContainer.addJarResource( a.getFile() );
} }
pluginManager.addToArtifactFilter( new ExcludesArtifactFilter( excludedArtifacts ) );
} }
} }
public void registerWagons()
{
PlexusContainer extensionContainer = getExtensionContainer();
if ( extensionContainer != null )
{
try
{
Map wagons = extensionContainer.lookupMap( Wagon.ROLE );
wagonManager.registerWagons( wagons.keySet(), extensionContainer );
}
catch ( ComponentLookupException e )
{
// now wagons found in the extension
}
}
}
private PlexusContainer getExtensionContainer()
{
// note: ideally extensions would live in their own realm, but this would mean that things like wagon-scm would
// have no way to obtain SCM extensions
return container.getChildContainer( CONTAINER_NAME );
}
public void contextualize( Context context ) public void contextualize( Context context )
throws ContextException throws ContextException
{ {

View File

@ -33,4 +33,6 @@ public interface ExtensionManager
{ {
void addExtension( Extension extension, MavenProject project, ArtifactRepository localRepository ) void addExtension( Extension extension, MavenProject project, ArtifactRepository localRepository )
throws ArtifactResolutionException, PlexusContainerException, ArtifactNotFoundException; throws ArtifactResolutionException, PlexusContainerException, ArtifactNotFoundException;
void registerWagons();
} }

View File

@ -168,6 +168,8 @@ public class DefaultLifecycleExecutor
} }
} }
extensionManager.registerWagons();
try try
{ {
Map handlers = findArtifactTypeHandlers( project, session.getSettings(), session.getLocalRepository() ); Map handlers = findArtifactTypeHandlers( project, session.getSettings(), session.getLocalRepository() );

View File

@ -1198,12 +1198,4 @@ public class DefaultPluginManager
{ {
return container.lookupMap( role ); return container.lookupMap( role );
} }
public void addToArtifactFilter( ArtifactFilter filter )
{
AndArtifactFilter newFilter = new AndArtifactFilter();
newFilter.add( filter );
newFilter.add( artifactFilter );
artifactFilter = newFilter;
}
} }

View File

@ -19,8 +19,6 @@ package org.apache.maven.plugin;
import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
import org.apache.maven.execution.MavenSession; import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Plugin; import org.apache.maven.model.Plugin;
@ -73,5 +71,4 @@ public interface PluginManager
Map getPluginComponents( Plugin plugin, String role ) Map getPluginComponents( Plugin plugin, String role )
throws ComponentLookupException, PluginManagerException; throws ComponentLookupException, PluginManagerException;
void addToArtifactFilter( ArtifactFilter filter );
} }

View File

@ -45,7 +45,7 @@
<role>org.apache.maven.artifact.metadata.ArtifactMetadataSource</role> <role>org.apache.maven.artifact.metadata.ArtifactMetadataSource</role>
</requirement> </requirement>
<requirement> <requirement>
<role>org.apache.maven.plugin.PluginManager</role> <role>org.apache.maven.artifact.manager.WagonManager</role>
</requirement> </requirement>
</requirements> </requirements>
</component> </component>
@ -328,7 +328,8 @@
<process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources> <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
<compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile> <compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
<process-test-resources> <process-test-resources>
org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources> org.apache.maven.plugins:maven-resources-plugin:testResources
</process-test-resources>
<test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile> <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
<test>org.apache.maven.plugins:maven-surefire-plugin:test</test> <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
<package> <package>
@ -357,7 +358,8 @@
<process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources> <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
<compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile> <compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
<process-test-resources> <process-test-resources>
org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources> org.apache.maven.plugins:maven-resources-plugin:testResources
</process-test-resources>
<test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile> <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
<test>org.apache.maven.plugins:maven-surefire-plugin:test</test> <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
<package> <package>
@ -391,7 +393,8 @@
<process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources> <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
<compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile> <compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
<process-test-resources> <process-test-resources>
org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources> org.apache.maven.plugins:maven-resources-plugin:testResources
</process-test-resources>
<test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile> <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
<test>org.apache.maven.plugins:maven-surefire-plugin:test</test> <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
<package> <package>
@ -419,7 +422,8 @@
<process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources> <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
<compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile> <compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
<process-test-resources> <process-test-resources>
org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources> org.apache.maven.plugins:maven-resources-plugin:testResources
</process-test-resources>
<test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile> <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
<test>org.apache.maven.plugins:maven-surefire-plugin:test</test> <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
<package>org.apache.maven.plugins:maven-war-plugin:war</package> <package>org.apache.maven.plugins:maven-war-plugin:war</package>
@ -443,7 +447,8 @@
<!-- START SNIPPET: ear-lifecycle --> <!-- START SNIPPET: ear-lifecycle -->
<phases> <phases>
<generate-resources> <generate-resources>
org.apache.maven.plugins:maven-ear-plugin:generate-application-xml</generate-resources> org.apache.maven.plugins:maven-ear-plugin:generate-application-xml
</generate-resources>
<process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources> <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
<package>org.apache.maven.plugins:maven-ear-plugin:ear</package> <package>org.apache.maven.plugins:maven-ear-plugin:ear</package>
<install>org.apache.maven.plugins:maven-install-plugin:install</install> <install>org.apache.maven.plugins:maven-install-plugin:install</install>
@ -468,7 +473,8 @@
<process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources> <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
<compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile> <compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
<process-test-resources> <process-test-resources>
org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources> org.apache.maven.plugins:maven-resources-plugin:testResources
</process-test-resources>
<test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile> <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
<test>org.apache.maven.plugins:maven-surefire-plugin:test</test> <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
<package>org.apache.maven.plugins:maven-rar-plugin:rar</package> <package>org.apache.maven.plugins:maven-rar-plugin:rar</package>
@ -480,7 +486,7 @@
</lifecycles> </lifecycles>
</configuration> </configuration>
</component> </component>
<component> <component>
<role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role> <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
<role-hint>par</role-hint> <role-hint>par</role-hint>
@ -502,7 +508,7 @@
<!-- END SNIPPET: par-lifecycle --> <!-- END SNIPPET: par-lifecycle -->
</configuration> </configuration>
</component> </component>
<component> <component>
<role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role> <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
<role-hint>ejb3</role-hint> <role-hint>ejb3</role-hint>
@ -524,7 +530,7 @@
<!-- END SNIPPET: ejb3-lifecycle --> <!-- END SNIPPET: ejb3-lifecycle -->
</configuration> </configuration>
</component> </component>
<component> <component>
<role>org.apache.maven.plugin.version.PluginVersionManager</role> <role>org.apache.maven.plugin.version.PluginVersionManager</role>
<role-hint>default</role-hint> <role-hint>default</role-hint>