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>