You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/08/13 19:52:27 UTC

svn commit: r803961 - in /maven/components/trunk/maven-core/src: main/java/org/apache/maven/project/ main/java/org/apache/maven/project/artifact/ test/java/org/apache/maven/project/

Author: bentmann
Date: Thu Aug 13 17:52:27 2009
New Revision: 803961

URL: http://svn.apache.org/viewvc?rev=803961&view=rev
Log:
[MNG-4298] Build MavenProject instances incrementally
Submitted by: Igor Fedorenko

Modified:
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuilder.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java
    maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java?rev=803961&r1=803960&r2=803961&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java Thu Aug 13 17:52:27 2009
@@ -23,7 +23,6 @@
 
 import org.apache.maven.Maven;
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
 import org.apache.maven.artifact.repository.RepositoryRequest;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
@@ -84,67 +83,94 @@
     public ProjectBuildingResult build( File pomFile, ProjectBuildingRequest configuration )
         throws ProjectBuildingException
     {
-        return build( pomFile, true, configuration, false );
+        return build( pomFile, true, configuration );
     }
 
-    private ProjectBuildingResult build( File pomFile, boolean localProject, ProjectBuildingRequest configuration,
-                                         boolean resolveDependencies )
+    private ProjectBuildingResult build( File pomFile, boolean localProject, ProjectBuildingRequest configuration )
         throws ProjectBuildingException
     {
-        ModelBuildingRequest request = getModelBuildingRequest( configuration, null );
-
-        DefaultModelBuildingListener listener = new DefaultModelBuildingListener( projectBuildingHelper, configuration );
-        request.setModelBuildingListeners( Arrays.asList( listener ) );
-
-        if ( localProject )
-        {
-            request.setPomFile( pomFile );
-        }
-        else
-        {
-            request.setModelSource( new FileModelSource( pomFile ) );
-        }
 
         ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
 
         try
         {
-            ModelBuildingResult result;
-            try
-            {
-                result = modelBuilder.build( request );
-            }
-            catch ( ModelBuildingException e )
-            {
-                throw new ProjectBuildingException( e.getModelId(), "Encountered POM errors", pomFile, e );
-            }
+            MavenProject project = configuration.getProject();
 
-            Model model = result.getEffectiveModel();
+            List<ModelProblem> modelProblems = null;
 
-            if ( localProject && !result.getProblems().isEmpty() && logger.isWarnEnabled() )
+            if ( project == null )
             {
-                logger.warn( "" );
-                logger.warn( "Some problems were encountered while building the effective model for " + model.getId() );
+                ModelBuildingRequest request = getModelBuildingRequest( configuration, null );
+    
+                DefaultModelBuildingListener listener = new DefaultModelBuildingListener( projectBuildingHelper, configuration );
+                request.setModelBuildingListeners( Arrays.asList( listener ) );
+    
+                if ( localProject )
+                {
+                    request.setPomFile( pomFile );
+                }
+                else
+                {
+                    request.setModelSource( new FileModelSource( pomFile ) );
+                }
+    
+                ModelBuildingResult result;
+                try
+                {
+                    result = modelBuilder.build( request );
+                }
+                catch ( ModelBuildingException e )
+                {
+                    throw new ProjectBuildingException( e.getModelId(), "Encountered POM errors", pomFile, e );
+                }
+
+                modelProblems = result.getProblems();
+
+                Model model = result.getEffectiveModel();
 
-                for ( ModelProblem problem : result.getProblems() )
+                if ( localProject && !result.getProblems().isEmpty() && logger.isWarnEnabled() )
                 {
-                    logger.warn( problem.getMessage() );
+                    logger.warn( "" );
+                    logger.warn( "Some problems were encountered while building the effective model for " + model.getId() );
+    
+                    for ( ModelProblem problem : result.getProblems() )
+                    {
+                        logger.warn( problem.getMessage() );
+                    }
+    
+                    logger.warn( "" );
+                    logger.warn( "It is highly recommended to fix these problems"
+                        + " because they threaten the stability of your build." );
+                    logger.warn( "" );
+                    logger.warn( "For this reason, future Maven versions will no"
+                        + " longer support building such malformed projects." );
+                    logger.warn( "" );
                 }
 
-                logger.warn( "" );
-                logger.warn( "It is highly recommended to fix these problems"
-                    + " because they threaten the stability of your build." );
-                logger.warn( "" );
-                logger.warn( "For this reason, future Maven versions will no"
-                    + " longer support building such malformed projects." );
-                logger.warn( "" );
+                project = toProject( result, configuration, listener );
             }
 
-            MavenProject project = toProject( result, configuration, listener );
+            try
+            {
+                if ( configuration.isProcessPlugins() && configuration.isProcessPluginConfiguration() )
+                {
+                    RepositoryRequest repositoryRequest = new DefaultRepositoryRequest();
+                    repositoryRequest.setLocalRepository( configuration.getLocalRepository() );
+                    repositoryRequest.setRemoteRepositories( project.getPluginArtifactRepositories() );
+                    repositoryRequest.setCache( configuration.getRepositoryCache() );
+                    repositoryRequest.setOffline( configuration.isOffline() );
+            
+                    lifecycle.populateDefaultConfigurationForPlugins( project.getModel().getBuild().getPlugins(), repositoryRequest );
+                }
+            }
+            catch ( LifecycleExecutionException e )
+            {
+                throw new ProjectBuildingException( project.getId(), e.getMessage(), e );
+            }
 
             ArtifactResolutionResult artifactResult = null;
 
-            if ( resolveDependencies )
+            if ( configuration.isResolveDependencies() )
             {
                 Artifact artifact = new ProjectArtifact( project );
 
@@ -164,7 +190,7 @@
                 project.setArtifacts( artifactResult.getArtifacts() );
             }
 
-            return new DefaultProjectBuildingResult( project, result.getProblems(), artifactResult );
+            return new DefaultProjectBuildingResult( project, modelProblems, artifactResult );
         }
         finally
         {
@@ -237,7 +263,7 @@
             throw new ProjectBuildingException( artifact.getId(), "Error resolving project artifact.", e );
         }
 
-        return build( artifact.getFile(), false, configuration, false );
+        return build( artifact.getFile(), false, configuration );
     }
 
     /**
@@ -278,12 +304,6 @@
         return new DefaultProjectBuildingResult( standaloneProject, result.getProblems(), null );
     }
 
-    public ProjectBuildingResult buildProjectWithDependencies( File pomFile, ProjectBuildingRequest request )
-        throws ProjectBuildingException
-    {
-        return build( pomFile, true, request, true );
-    }
-
     public List<ProjectBuildingResult> build( List<File> pomFiles, boolean recursive, ProjectBuildingRequest config )
         throws ProjectBuildingException
     {
@@ -480,24 +500,6 @@
 
         project.setClassRealm( listener.getProjectRealm() );
 
-        try
-        {
-            if ( configuration.isProcessPlugins() && configuration.isProcessPluginConfiguration() )
-            {
-                RepositoryRequest repositoryRequest = new DefaultRepositoryRequest();
-                repositoryRequest.setLocalRepository( configuration.getLocalRepository() );
-                repositoryRequest.setRemoteRepositories( project.getPluginArtifactRepositories() );
-                repositoryRequest.setCache( configuration.getRepositoryCache() );
-                repositoryRequest.setOffline( configuration.isOffline() );
-
-                lifecycle.populateDefaultConfigurationForPlugins( model.getBuild().getPlugins(), repositoryRequest );
-            }
-        }
-        catch ( LifecycleExecutionException e )
-        {
-            throw new ProjectBuildingException( project.getId(), e.getMessage(), e );
-        }
-
         Build build = project.getBuild();
         project.addScriptSourceRoot( build.getScriptSourceDirectory() );
         project.addCompileSourceRoot( build.getSourceDirectory() );
@@ -517,25 +519,6 @@
         return project;
     }
 
-    private static String safeVersionlessKey( String groupId, String artifactId )
-    {
-        String gid = groupId;
-
-        if ( StringUtils.isEmpty( gid ) )
-        {
-            gid = "unknown";
-        }
-
-        String aid = artifactId;
-
-        if ( StringUtils.isEmpty( aid ) )
-        {
-            aid = "unknown";
-        }
-
-        return ArtifactUtils.versionlessKey( gid, aid );
-    }
-
     private String toSourceHint( Model model )
     {
         StringBuilder buffer = new StringBuilder( 192 );

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java?rev=803961&r1=803960&r2=803961&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java Thu Aug 13 17:52:27 2009
@@ -46,7 +46,7 @@
 
     private List<ModelEventListener> listeners;
 
-    private MavenProject topProject;
+    private MavenProject project;
 
     private int validationLevel = ModelBuildingRequest.VALIDATION_LEVEL_STRICT;
 
@@ -66,6 +66,8 @@
 
     private Date buildStartTime;
 
+    private boolean resolveDependencies;
+
     public DefaultProjectBuildingRequest()
     {
         processPlugins = true;
@@ -79,14 +81,14 @@
         pluginArtifactRepositories = new ArrayList<ArtifactRepository>();
     }
 
-    public MavenProject getTopLevelProjectFromReactor()
+    public MavenProject getProject()
     {
-        return topProject;
+        return project;
     }
 
-    public void setTopLevelProjectForReactor( MavenProject mavenProject )
+    public void setProject( MavenProject mavenProject )
     {
-        this.topProject = mavenProject;
+        this.project = mavenProject;
     }
 
     public DefaultProjectBuildingRequest setOffline( boolean offline )
@@ -234,6 +236,17 @@
         this.processPluginConfiguration = processPluginConfiguration;
         return this;
     }
+    
+    public ProjectBuildingRequest setResolveDependencies( boolean resolveDependencies )
+    {
+        this.resolveDependencies = resolveDependencies;
+        return this;
+    }
+
+    public boolean isResolveDependencies()
+    {
+        return resolveDependencies;
+    }
 
     public ProjectBuildingRequest setValidationLevel( int validationLevel )
     {

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuilder.java?rev=803961&r1=803960&r2=803961&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuilder.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuilder.java Thu Aug 13 17:52:27 2009
@@ -35,12 +35,6 @@
     ProjectBuildingResult buildStandaloneSuperProject( ProjectBuildingRequest request )
         throws ProjectBuildingException;
 
-    // TODO: This also doesn't really belong here as it's a mix of project builder and artifact resolution and belongs
-    // in an integration component like the embedder.
-    @Deprecated
-    ProjectBuildingResult buildProjectWithDependencies( File project, ProjectBuildingRequest request )
-        throws ProjectBuildingException;
-
     /**
      * Builds the projects for the specified POM files and optionally their children.
      * 

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java?rev=803961&r1=803960&r2=803961&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java Thu Aug 13 17:52:27 2009
@@ -41,9 +41,9 @@
 
     Properties getSystemProperties();
 
-    void setTopLevelProjectForReactor(MavenProject mavenProject);
+    void setProject(MavenProject mavenProject);
 
-    MavenProject getTopLevelProjectFromReactor();
+    MavenProject getProject();
         
     ProjectBuilderConfiguration setProcessPlugins( boolean processPlugins );
     

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java?rev=803961&r1=803960&r2=803961&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java Thu Aug 13 17:52:27 2009
@@ -23,12 +23,10 @@
 import java.util.List;
 import java.util.Properties;
 
-import org.apache.maven.MavenTransferListener;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.RepositoryCache;
 import org.apache.maven.model.Profile;
 import org.apache.maven.model.building.ModelBuildingRequest;
-import org.apache.maven.wagon.events.TransferListener;
 
 public interface ProjectBuildingRequest
 {
@@ -89,9 +87,9 @@
      */
     Properties getUserProperties();
 
-    void setTopLevelProjectForReactor(MavenProject mavenProject);
+    void setProject(MavenProject mavenProject);
 
-    MavenProject getTopLevelProjectFromReactor();
+    MavenProject getProject();
 
     ProjectBuildingRequest setProcessPlugins( boolean processPlugins );
 
@@ -101,6 +99,10 @@
 
     boolean isProcessPluginConfiguration();
 
+    ProjectBuildingRequest setResolveDependencies( boolean resolveDependencies );
+
+    boolean isResolveDependencies();
+
     /**
      * Controls the level of validation to perform on processed models. By default, models are validated in strict mode.
      * 

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java?rev=803961&r1=803960&r2=803961&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java Thu Aug 13 17:52:27 2009
@@ -204,7 +204,7 @@
     public ResolutionGroup get( Artifact artifact, boolean resolveManagedVersions, ArtifactRepository localRepository,
                                 List<ArtifactRepository> remoteRepositories )
     {
-        CacheKey cacheKey = new CacheKey( artifact, resolveManagedVersions, localRepository, remoteRepositories );
+        CacheKey cacheKey = newCacheKey( artifact, resolveManagedVersions, localRepository, remoteRepositories );
 
         CacheRecord cacheRecord = cache.get( cacheKey );
 
@@ -231,7 +231,17 @@
     public void put( Artifact artifact, boolean resolveManagedVersions, ArtifactRepository localRepository,
                      List<ArtifactRepository> remoteRepositories, ResolutionGroup result )
     {
-        CacheKey cacheKey = new CacheKey( artifact, resolveManagedVersions, localRepository, remoteRepositories );
+        put( newCacheKey( artifact, resolveManagedVersions, localRepository, remoteRepositories ), result );
+    }
+
+    protected CacheKey newCacheKey( Artifact artifact, boolean resolveManagedVersions,
+                                    ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
+    {
+        return new CacheKey( artifact, resolveManagedVersions, localRepository, remoteRepositories );
+    }
+
+    protected void put( CacheKey cacheKey, ResolutionGroup result )
+    {
         CacheRecord cacheRecord =
             new CacheRecord( result.getPomArtifact(), result.getRelocatedArtifact(), result.getArtifacts(),
                              result.getManagedVersions(), result.getResolutionRepositories() );

Modified: maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java?rev=803961&r1=803960&r2=803961&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java (original)
+++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java Thu Aug 13 17:52:27 2009
@@ -129,10 +129,11 @@
         configuration.setLocalRepository( getLocalRepository() );
         configuration.setRemoteRepositories( Arrays.asList( new ArtifactRepository[] {} ) );
         configuration.setProcessPlugins( false );
+        configuration.setResolveDependencies( true );
 
         try
         {
-            return projectBuilder.buildProjectWithDependencies( pom, configuration ).getProject();
+            return projectBuilder.build( pom, configuration ).getProject();
         }
         catch ( Exception e )
         {