You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2007/10/24 23:14:28 UTC
svn commit: r588029 - in /maven/components/trunk: ./ maven-core/
maven-core/src/main/java/org/apache/maven/
maven-core/src/main/java/org/apache/maven/execution/
maven-core/src/main/java/org/apache/maven/plugin/
maven-embedder/src/main/java/org/apache/m...
Author: jdcasey
Date: Wed Oct 24 14:14:27 2007
New Revision: 588029
URL: http://svn.apache.org/viewvc?rev=588029&view=rev
Log:
Cleaning up extension and plugin realms for a project once the build completes.
Modified:
maven/components/trunk/build.properties
maven/components/trunk/maven-core/pom.xml
maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenProjectSession.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
maven/components/trunk/pom.xml
Modified: maven/components/trunk/build.properties
URL: http://svn.apache.org/viewvc/maven/components/trunk/build.properties?rev=588029&r1=588028&r2=588029&view=diff
==============================================================================
--- maven/components/trunk/build.properties (original)
+++ maven/components/trunk/build.properties Wed Oct 24 14:14:27 2007
@@ -16,7 +16,7 @@
# under the License.
classworlds.version=1.2-alpha-10
-plexus.version=1.0-alpha-34
+plexus.version=1.0-alpha-35-SNAPSHOT
plexus-utils.version=1.4.5
maven-artifact.version=3.0-SNAPSHOT
commons-cli.version=1.0
Modified: maven/components/trunk/maven-core/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/pom.xml?rev=588029&r1=588028&r2=588029&view=diff
==============================================================================
--- maven/components/trunk/maven-core/pom.xml (original)
+++ maven/components/trunk/maven-core/pom.xml Wed Oct 24 14:14:27 2007
@@ -88,6 +88,7 @@
<artifactId>maven-plugin-api</artifactId>
<version>2.1-SNAPSHOT</version>
</dependency>
+
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-interactivity-api</artifactId>
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java?rev=588029&r1=588028&r2=588029&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java Wed Oct 24 14:14:27 2007
@@ -192,59 +192,66 @@
dispatcher,
projectSessions );
- for ( Iterator i = request.getGoals().iterator(); i.hasNext(); )
+ try
{
- String goal = (String) i.next();
+ for ( Iterator i = request.getGoals().iterator(); i.hasNext(); )
+ {
+ String goal = (String) i.next();
- TaskValidationResult tvr = lifecycleExecutor.isTaskValid( goal, session, reactorManager.getTopLevelProject() );
+ TaskValidationResult tvr = lifecycleExecutor.isTaskValid( goal, session, reactorManager.getTopLevelProject() );
- if ( !tvr.isTaskValid() )
- {
- result.addBuildFailureException( new InvalidTaskException( tvr ) );
+ if ( !tvr.isTaskValid() )
+ {
+ result.addBuildFailureException( new InvalidTaskException( tvr ) );
- return result;
+ return result;
+ }
}
- }
-
- getLogger().info( "Scanning for projects..." );
- if ( reactorManager.hasMultipleProjects() )
- {
- getLogger().info( "Reactor build order: " );
+ getLogger().info( "Scanning for projects..." );
- for ( Iterator i = reactorManager.getSortedProjects().iterator(); i.hasNext(); )
+ if ( reactorManager.hasMultipleProjects() )
{
- MavenProject project = (MavenProject) i.next();
+ getLogger().info( "Reactor build order: " );
- getLogger().info( " " + project.getName() );
+ for ( Iterator i = reactorManager.getSortedProjects().iterator(); i.hasNext(); )
+ {
+ MavenProject project = (MavenProject) i.next();
+
+ getLogger().info( " " + project.getName() );
+ }
}
- }
- initializeBuildContext( request );
+ initializeBuildContext( request );
+
+ try
+ {
+ lifecycleExecutor.execute(
+ session,
+ reactorManager,
+ dispatcher );
+ }
+ catch ( LifecycleExecutionException e )
+ {
+ result.addLifecycleExecutionException( e );
+ return result;
+ }
+ catch ( BuildFailureException e )
+ {
+ result.addBuildFailureException( e );
+ return result;
+ }
+
+ result.setTopologicallySortedProjects( reactorManager.getSortedProjects() );
+
+ result.setProject( reactorManager.getTopLevelProject() );
- try
- {
- lifecycleExecutor.execute(
- session,
- reactorManager,
- dispatcher );
- }
- catch ( LifecycleExecutionException e )
- {
- result.addLifecycleExecutionException( e );
return result;
}
- catch ( BuildFailureException e )
+ finally
{
- result.addBuildFailureException( e );
- return result;
+ session.dispose();
}
-
- result.setTopologicallySortedProjects( reactorManager.getSortedProjects() );
-
- result.setProject( reactorManager.getTopLevelProject() );
-
- return result;
}
/**
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenProjectSession.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenProjectSession.java?rev=588029&r1=588028&r2=588029&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenProjectSession.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenProjectSession.java Wed Oct 24 14:14:27 2007
@@ -12,6 +12,7 @@
import java.util.Collections;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.Map;
/**
@@ -54,6 +55,40 @@
projectRealm = container.createComponentRealm( projectId, Collections.EMPTY_LIST );
}
+ public void dispose()
+ {
+ for ( Iterator it = componentRealms.values().iterator(); it.hasNext(); )
+ {
+ ClassRealm realm = (ClassRealm) it.next();
+ disposeRealm( realm );
+ }
+
+ disposeRealm( projectRealm );
+ try
+ {
+ container.removeComponentRealm( projectRealm );
+ }
+ catch( PlexusContainerException e )
+ {
+ e.printStackTrace();
+ }
+
+ componentRealms.clear();
+ projectRealm = null;
+ }
+
+ private void disposeRealm( ClassRealm realm )
+ {
+ try
+ {
+ realm.getWorld().disposeRealm( realm.getId() );
+ }
+ catch ( NoSuchRealmException e )
+ {
+ // impossible
+ }
+ }
+
public String getProjectId()
{
return projectId;
@@ -66,12 +101,24 @@
public boolean containsExtensionRealm( Artifact extensionArtifact )
{
+ checkDisposed();
+
String id = createExtensionRealmId( extensionArtifact );
return componentRealms.containsKey( id );
}
+ private void checkDisposed()
+ {
+ if ( projectRealm == null )
+ {
+ throw new IllegalStateException( "MavenProjectSession for: " + projectId + " with hashcode: " + hashCode() + " has been disposed, and is no longer valid for use." );
+ }
+ }
+
public boolean containsPluginRealm( Plugin plugin )
{
+ checkDisposed();
+
String realmId = createPluginRealmId( ArtifactUtils.versionlessKey( plugin.getGroupId(), plugin.getArtifactId() ) );
return componentRealms.containsKey( realmId );
@@ -96,6 +143,8 @@
public ClassRealm createExtensionRealm( Artifact extensionArtifact )
throws DuplicateRealmException
{
+ checkDisposed();
+
String realmId = createExtensionRealmId( extensionArtifact );
ClassRealm extRealm = container.getContainerRealm().createChildRealm( realmId );
@@ -124,6 +173,8 @@
public ClassRealm getPluginRealm( Plugin plugin )
throws NoSuchRealmException
{
+ checkDisposed();
+
String realmId = createPluginRealmId( ArtifactUtils.versionlessKey( plugin.getGroupId(), plugin.getArtifactId() ) );
return projectRealm.getWorld().getRealm( realmId );
@@ -133,6 +184,8 @@
public ClassRealm createPluginRealm( Plugin plugin )
throws DuplicateRealmException
{
+ checkDisposed();
+
String realmId = createPluginRealmId( ArtifactUtils.versionlessKey( plugin.getGroupId(), plugin.getArtifactId() ) );
ClassRealm extRealm = projectRealm.createChildRealm( realmId );
@@ -150,6 +203,8 @@
public ClassRealm getPluginRealm( PluginDescriptor pd )
throws NoSuchRealmException
{
+ checkDisposed();
+
String realmId = createPluginRealmId( ArtifactUtils.versionlessKey( pd.getGroupId(), pd.getArtifactId() ) );
ClassRealm extRealm = projectRealm.getWorld().getRealm( realmId );
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java?rev=588029&r1=588028&r2=588029&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java Wed Oct 24 14:14:27 2007
@@ -29,6 +29,8 @@
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -68,7 +70,16 @@
this.reactorManager = reactorManager;
- this.projectSessions = projectSessions;
+ this.projectSessions = projectSessions == null ? new HashMap() : projectSessions;
+ }
+
+ public void dispose()
+ {
+ for ( Iterator it = projectSessions.values().iterator(); it.hasNext(); )
+ {
+ MavenProjectSession session = (MavenProjectSession) it.next();
+ session.dispose();
+ }
}
// TODO: Figure out how/when we can shut down all the realms for extensions/plugins connected to each project session...
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=588029&r1=588028&r2=588029&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 Oct 24 14:14:27 2007
@@ -664,7 +664,28 @@
ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
- ClassRealm pluginRealm = pluginDescriptor.getClassRealm();
+ MavenProjectSession projectSession;
+ try
+ {
+ projectSession = session.getProjectSession( project );
+ }
+ catch ( PlexusContainerException e )
+ {
+ throw new PluginManagerException( mojoDescriptor, "Failed to create project-specific session for project: " + project.getId()
+ + ".", project, e );
+ }
+
+ ClassRealm pluginRealm;
+ try
+ {
+ pluginRealm = projectSession.getPluginRealm( pluginDescriptor );
+ }
+ catch ( NoSuchRealmException e )
+ {
+ getLogger().debug( "Plugin realm: " + pluginDescriptor.getId() + " not found in project session for: " + project.getId() + ". Using project realm instead." );
+ pluginRealm = projectSession.getProjectRealm();
+ }
+
ClassRealm oldRealm = null;
try
@@ -707,6 +728,7 @@
}
finally
{
+ pluginDescriptor.setClassRealm( null );
if ( oldRealm != null )
{
container.setLookupRealm( oldRealm );
@@ -810,6 +832,7 @@
// lookups that occur in contextualize calls in line with the right realm.
ClassRealm oldRealm = container.setLookupRealm( realm );
+ pluginDescriptor.setClassRealm( realm );
getLogger().debug(
"Looking up mojo " + mojoDescriptor.getRoleHint() + " in realm "
Modified: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java?rev=588029&r1=588028&r2=588029&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java (original)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java Wed Oct 24 14:14:27 2007
@@ -321,7 +321,14 @@
MavenSession session = new MavenSession( container, request, null, null, new HashMap() );
- pluginManager.verifyPlugin( plugin, project, session );
+ try
+ {
+ pluginManager.verifyPlugin( plugin, project, session );
+ }
+ finally
+ {
+ session.dispose();
+ }
}
/** protected for tests only.. */
@@ -471,7 +478,7 @@
Map handlers = findArtifactTypeHandlers( project );
- //TODO: ok this is crappy, now there are active collections so when new artifact handlers
+ //TODO: ok this is crappy, now there are active collections so when new artifact handlers
// enter the system they should be available.
artifactHandlerManager.addHandlers( handlers );
@@ -645,8 +652,8 @@
try
{
- ContainerConfiguration cc = new DefaultContainerConfiguration()
- .addComponentDiscoverer( new MavenPluginDiscoverer() )
+ ContainerConfiguration cc = new DefaultContainerConfiguration()
+ .addComponentDiscoverer( new MavenPluginDiscoverer() )
.addComponentDiscoveryListener( new MavenPluginCollector() )
.setClassWorld( classWorld ).setParentContainer( configuration.getParentContainer() ).setName( "embedder" );
Modified: maven/components/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/pom.xml?rev=588029&r1=588028&r2=588029&view=diff
==============================================================================
--- maven/components/trunk/pom.xml (original)
+++ maven/components/trunk/pom.xml Wed Oct 24 14:14:27 2007
@@ -138,7 +138,7 @@
<module>maven-embedder</module>
</modules>
<properties>
- <plexusVersion>1.0-alpha-34</plexusVersion>
+ <plexusVersion>1.0-alpha-35-SNAPSHOT</plexusVersion>
<wagonVersion>1.0-beta-2</wagonVersion>
</properties>
<dependencies>