Author: bentmann
Date: Mon Sep 28 15:43:14 2009
New Revision: 819596

URL: http://svn.apache.org/viewvc?rev=819596&view=rev
Log:
o Fixed tracking of extension realms in cache

Modified:
    
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java
    
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
    
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
    
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
    
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java
    
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java

Modified: 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java?rev=819596&r1=819595&r2=819596&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java
 (original)
+++ 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java
 Mon Sep 28 15:43:14 2009
@@ -25,12 +25,10 @@
 import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
 import org.apache.maven.artifact.repository.RepositoryRequest;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.building.AbstractModelBuildingListener;
 import org.apache.maven.model.building.ModelBuildingEvent;
 import org.apache.maven.plugin.version.PluginVersionResolutionException;
-import org.codehaus.plexus.classworlds.realm.ClassRealm;
 
 /**
  * Processes events from the model builder while building the effective model 
for a {...@link MavenProject} instance.
@@ -41,24 +39,28 @@
     extends AbstractModelBuildingListener
 {
 
+    private MavenProject project;
+
     private ProjectBuildingHelper projectBuildingHelper;
 
     private ProjectBuildingRequest projectBuildingRequest;
 
-    private ClassRealm projectRealm;
-
-    private ArtifactFilter extensionArtifactFilter;
-
     private List<ArtifactRepository> remoteRepositories;
 
     private List<ArtifactRepository> pluginRepositories;
 
-    public DefaultModelBuildingListener( ProjectBuildingHelper 
projectBuildingHelper,
+    public DefaultModelBuildingListener( MavenProject project, 
ProjectBuildingHelper projectBuildingHelper,
                                          ProjectBuildingRequest 
projectBuildingRequest )
     {
+        if ( project == null )
+        {
+            throw new IllegalArgumentException( "project missing" );
+        }
+        this.project = project;
+
         if ( projectBuildingHelper == null )
         {
-            throw new IllegalArgumentException( "project realm manager 
missing" );
+            throw new IllegalArgumentException( "project building helper 
missing" );
         }
         this.projectBuildingHelper = projectBuildingHelper;
 
@@ -72,51 +74,13 @@
     }
 
     /**
-     * Gets the project realm that hosts the build extensions.
-     * 
-     * @return The project realm or {...@code null} if the project requires no 
extensions.
-     */
-    public ClassRealm getProjectRealm()
-    {
-        return projectRealm;
-    }
-
-    /**
-     * Gets the artifact filter to exclude extension artifacts from plugin 
realms.
-     * 
-     * @return The extension artifact filter or {...@code null} if none.
-     */
-    public ArtifactFilter getExtentionArtifactFilter()
-    {
-        return extensionArtifactFilter;
-    }
-
-    /**
-     * Gets the effective remote artifact repositories for the project. The 
repository list is created from the
-     * repositories given by {...@link 
ProjectBuildingRequest#getRemoteRepositories()} and the repositories given in 
the
-     * POM, i.e. {...@link Model#getRepositories()}. The POM repositories 
themselves also contain any repositories
-     * contributed by external profiles as specified in {...@link 
ProjectBuildingRequest#getProfiles()}. Furthermore, the
-     * repositories have already been mirrored.
-     * 
-     * @return The remote artifact repositories for the project.
-     */
-    public List<ArtifactRepository> getRemoteRepositories()
-    {
-        return remoteRepositories;
-    }
-
-    /**
-     * Gets the effective remote plugin repositories for the project. The 
repository list is created from the
-     * repositories given by {...@link 
ProjectBuildingRequest#getPluginArtifactRepositories()} and the repositories 
given
-     * in the POM, i.e. {...@link Model#getPluginRepositories()}. The POM 
repositories themselves also contain any
-     * repositories contributed by external profiles as specified in {...@link 
ProjectBuildingRequest#getProfiles()}.
-     * Furthermore, the repositories have already been mirrored.
+     * Gets the project whose model is being built.
      * 
-     * @return The remote plugin repositories for the project.
+     * @return The project, never {...@code null}.
      */
-    public List<ArtifactRepository> getPluginRepositories()
+    public MavenProject getProject()
     {
-        return pluginRepositories;
+        return project;
     }
 
     @Override
@@ -134,6 +98,7 @@
         {
             event.getProblems().addError( "Invalid plugin repository: " + 
e.getMessage(), e );
         }
+        project.setPluginArtifactRepositories( pluginRepositories );
 
         if ( event.getRequest().isProcessPlugins() )
         {
@@ -146,10 +111,10 @@
                 repositoryRequest.setOffline( 
projectBuildingRequest.isOffline() );
 
                 ProjectRealmCache.CacheRecord record =
-                    projectBuildingHelper.createProjectRealm( model, 
repositoryRequest );
+                    projectBuildingHelper.createProjectRealm( project, model, 
repositoryRequest );
 
-                projectRealm = record.realm;
-                extensionArtifactFilter = record.extensionArtifactFilter;
+                project.setClassRealm( record.realm );
+                project.setExtensionArtifactFilter( 
record.extensionArtifactFilter );
             }
             catch ( ArtifactResolutionException e )
             {
@@ -160,14 +125,14 @@
                 event.getProblems().addError( "Unresolveable build extensions: 
" + e.getMessage(), e );
             }
 
-            if ( projectRealm != null )
+            if ( project.getClassRealm() != null )
             {
                 /*
                  * Update the context class loader such that the container 
will search the project realm when the model
                  * builder injects the lifecycle bindings from the packaging 
in the next step. The context class loader
                  * will be reset by the project builder when the project is 
fully assembled.
                  */
-                Thread.currentThread().setContextClassLoader( projectRealm );
+                Thread.currentThread().setContextClassLoader( 
project.getClassRealm() );
             }
         }
 
@@ -182,6 +147,7 @@
         {
             event.getProblems().addError( "Invalid artifact repository: " + 
e.getMessage(), e );
         }
+        project.setRemoteArtifactRepositories( remoteRepositories );
     }
 
 }

Modified: 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java?rev=819596&r1=819595&r2=819596&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
 (original)
+++ 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
 Mon Sep 28 15:43:14 2009
@@ -92,8 +92,11 @@
             if ( project == null )
             {
                 ModelBuildingRequest request = getModelBuildingRequest( 
configuration, null );
-    
-                DefaultModelBuildingListener listener = new 
DefaultModelBuildingListener( projectBuildingHelper, configuration );
+
+                project = new MavenProject( repositorySystem, this, 
configuration );
+
+                DefaultModelBuildingListener listener =
+                    new DefaultModelBuildingListener( project, 
projectBuildingHelper, configuration );
                 request.setModelBuildingListener( listener );
     
                 if ( localProject )
@@ -117,7 +120,7 @@
 
                 modelProblems = result.getProblems();
 
-                project = toProject( result, configuration, listener );
+                initProject( project, result );
             }
 
             ArtifactResolutionResult artifactResult = null;
@@ -228,7 +231,10 @@
     {
         ModelBuildingRequest request = getModelBuildingRequest( config, null );
 
-        DefaultModelBuildingListener listener = new 
DefaultModelBuildingListener( projectBuildingHelper, config );
+        MavenProject standaloneProject = new MavenProject( repositorySystem, 
this, config );
+
+        DefaultModelBuildingListener listener =
+            new DefaultModelBuildingListener( standaloneProject, 
projectBuildingHelper, config );
         request.setModelBuildingListener( listener );
 
         request.setModelSource( new UrlModelSource( getClass().getResource( 
"standalone.xml" ) ) );
@@ -243,12 +249,11 @@
             throw new ProjectBuildingException( "[standalone]", "Failed to 
build standalone project", e );
         }
 
-        MavenProject standaloneProject = new MavenProject( 
result.getEffectiveModel(), repositorySystem, this, config );
+        standaloneProject.setModel( result.getEffectiveModel() );
+        standaloneProject.setOriginalModel( result.getRawModel() );
 
         standaloneProject.setActiveProfiles( 
result.getActiveExternalProfiles() );
         standaloneProject.setInjectedProfileIds( "external", getProfileIds( 
result.getActiveExternalProfiles() ) );
-        standaloneProject.setRemoteArtifactRepositories( 
listener.getRemoteRepositories() );
-        standaloneProject.setPluginArtifactRepositories( 
listener.getPluginRepositories() );
 
         standaloneProject.setExecutionRoot( true );
 
@@ -300,11 +305,14 @@
         {
             ModelBuildingRequest request = getModelBuildingRequest( config, 
reactorModelPool );
 
+            MavenProject project = new MavenProject( repositorySystem, this, 
config );
+
             request.setPomFile( pomFile );
             request.setTwoPhaseBuilding( true );
             request.setModelCache( modelCache );
 
-            DefaultModelBuildingListener listener = new 
DefaultModelBuildingListener( projectBuildingHelper, config );
+            DefaultModelBuildingListener listener =
+                new DefaultModelBuildingListener( project, 
projectBuildingHelper, config );
             request.setModelBuildingListener( listener );
 
             try
@@ -437,7 +445,8 @@
             {
                 ModelBuildingResult result = modelBuilder.build( 
interimResult.request, interimResult.result );
 
-                MavenProject project = toProject( result, config, 
interimResult.listener );
+                MavenProject project = interimResult.listener.getProject();
+                initProject( project, result );
 
                 projects.add( project );
 
@@ -463,12 +472,12 @@
         return noErrors;
     }
 
-    private MavenProject toProject( ModelBuildingResult result, 
ProjectBuildingRequest configuration,
-                                    DefaultModelBuildingListener listener )
+    private void initProject( MavenProject project, ModelBuildingResult result 
)
     {
         Model model = result.getEffectiveModel();
 
-        MavenProject project = new MavenProject( model, repositorySystem, 
this, configuration );
+        project.setModel( model );
+        project.setOriginalModel( result.getRawModel() );
 
         project.setFile( model.getPomFile() );
 
@@ -480,14 +489,6 @@
                                              project.getPackaging() );
         project.setArtifact( projectArtifact );
 
-        project.setOriginalModel( result.getRawModel() );
-
-        project.setRemoteArtifactRepositories( 
listener.getRemoteRepositories() );
-        project.setPluginArtifactRepositories( 
listener.getPluginRepositories() );
-
-        project.setClassRealm( listener.getProjectRealm() );
-        project.setExtensionArtifactFilter( 
listener.getExtentionArtifactFilter() );
-
         Build build = project.getBuild();
         project.addScriptSourceRoot( build.getScriptSourceDirectory() );
         project.addCompileSourceRoot( build.getSourceDirectory() );
@@ -503,8 +504,6 @@
         {
             project.setInjectedProfileIds( modelId, getProfileIds( 
result.getActivePomProfiles( modelId ) ) );
         }
-
-        return project;
     }
 
 }

Modified: 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java?rev=819596&r1=819595&r2=819596&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
 (original)
+++ 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
 Mon Sep 28 15:43:14 2009
@@ -129,7 +129,7 @@
         return artifactRepositories;
     }
 
-    public synchronized ProjectRealmCache.CacheRecord createProjectRealm( 
Model model,
+    public synchronized ProjectRealmCache.CacheRecord createProjectRealm( 
MavenProject project, Model model,
                                                                           
RepositoryRequest repositoryRequest )
         throws ArtifactResolutionException, PluginVersionResolutionException
     {
@@ -261,6 +261,8 @@
                 extensionRealmCache.put( plugin, repositoryRequest, 
extensionRealm, artifacts, extensionDescriptor );
             }
 
+            extensionRealmCache.register( project, extensionRealm );
+
             extensionRealms.add( extensionRealm );
             if ( extensionDescriptor != null )
             {

Modified: 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java?rev=819596&r1=819595&r2=819596&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
 (original)
+++ 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
 Mon Sep 28 15:43:14 2009
@@ -216,30 +216,22 @@
     /**
      * Constructor
      * 
-     * @param model - may not be null
      * @param artifactFactory - may not be null
      * @param repositorySystem - may not be null
      * @param mavenProjectBuilder
      * @param projectBuilderConfiguration
      * @throws InvalidRepositoryException
      */
-    public MavenProject( Model model, RepositorySystem repositorySystem, 
ProjectBuilder mavenProjectBuilder, ProjectBuildingRequest 
projectBuilderConfiguration )
+    MavenProject( RepositorySystem repositorySystem, ProjectBuilder 
mavenProjectBuilder, ProjectBuildingRequest projectBuilderConfiguration )
     {
-        if ( model == null )
-        {
-            throw new IllegalArgumentException( "model: null" );
-        }
-
         if ( repositorySystem == null )
         {
             throw new IllegalArgumentException( "mavenTools: null" );
         }
 
-        setModel( model );
         this.mavenProjectBuilder = mavenProjectBuilder;
         this.projectBuilderConfiguration = projectBuilderConfiguration;
         this.repositorySystem = repositorySystem;
-        originalModel = model;
     }
 
     //TODO: need to integrate the effective scope and refactor it out of the 
MMS

Modified: 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java?rev=819596&r1=819595&r2=819596&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java
 (original)
+++ 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java
 Mon Sep 28 15:43:14 2009
@@ -58,12 +58,14 @@
     /**
      * Creates the project realm that hosts the build extensions of the 
specified model.
      * 
+     * @param project The project to create the project realm for, must not be 
{...@code null}
      * @param model The model to create the project realm for, must not be 
{...@code null}
      * @param repositoryRequest The repository request to use for artifact 
resolution, must not be {...@code null}.
      * @return The record with the project realm and extension artifact 
filter, never {...@code null}.
      * @throws ArtifactResolutionException If any build extension could not be 
resolved.
      */
-    ProjectRealmCache.CacheRecord createProjectRealm( Model model, 
RepositoryRequest repositoryRequest )
+    ProjectRealmCache.CacheRecord createProjectRealm( MavenProject project, 
Model model,
+                                                      RepositoryRequest 
repositoryRequest )
         throws ArtifactResolutionException, PluginVersionResolutionException;
 
 }

Modified: 
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java?rev=819596&r1=819595&r2=819596&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java
 (original)
+++ 
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java
 Mon Sep 28 15:43:14 2009
@@ -55,7 +55,8 @@
         }
     }
 
-    public ProjectRealmCache.CacheRecord createProjectRealm( Model model, 
RepositoryRequest repositoryRequest )
+    public ProjectRealmCache.CacheRecord createProjectRealm( MavenProject 
proejct, Model model,
+                                                             RepositoryRequest 
repositoryRequest )
         throws ArtifactResolutionException
     {
         return new ProjectRealmCache.CacheRecord( null, null );


Reply via email to