Author: sisbell
Date: Fri Apr  3 10:56:06 2009
New Revision: 761609

URL: http://svn.apache.org/viewvc?rev=761609&view=rev
Log:
Separated out the interpolation from the build.

Modified:
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=761609&r1=761608&r2=761609&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 Fri Apr  3 10:56:06 2009
@@ -123,6 +123,7 @@
     public MavenProject build( File pomFile, ProjectBuilderConfiguration 
configuration )
         throws ProjectBuildingException
     {
+       //Do inheritance
         PomClassicDomainModel domainModel;
                try 
                {
@@ -132,8 +133,33 @@
                {
                        throw new ProjectBuildingException("", "", e);
                }
-     
-        MavenProject project = buildWithProfiles( domainModel, configuration, 
pomFile );
+
+               //Profiles
+        List<Profile> projectProfiles;
+        try
+        {
+               projectProfiles = 
ProfileContext.getActiveProfilesFrom(configuration, domainModel.getModel(), 
container);
+        }
+        catch ( ProfileActivationException e )
+        {
+            throw new ProjectBuildingException( "", "Failed to activate pom 
profiles.");
+        }   
+        catch(IOException e)
+        {
+               throw new ProjectBuildingException( "", "Failed to activate pom 
profiles.");    
+        }
+        
+        try
+        {
+            domainModel = ProcessorContext.mergeProfilesIntoModel( 
projectProfiles, domainModel );
+        }
+        catch ( IOException e )
+        {
+            throw new ProjectBuildingException("", "");
+        }              
+               //Interpolation
+        MavenProject project = interpolateDomainModel( domainModel, 
configuration, pomFile );
+        project.setActiveProfiles( projectProfiles );
 
         Build build = project.getBuild();
         // NOTE: setting this script-source root before path translation, 
because
@@ -174,6 +200,11 @@
         {
             return project;
         }
+        
+        if(configuration.getRemoteRepositories() == null)
+        {
+               throw new 
IllegalArgumentException("configuration.getRemoteRepositories(): null");
+        }
 
         ArtifactResolutionRequest request = new ArtifactResolutionRequest( 
artifact, configuration.getLocalRepository(), 
configuration.getRemoteRepositories() );
         ArtifactResolutionResult result = repositorySystem.resolve( request );
@@ -195,9 +226,31 @@
         {
                        throw new ProjectBuildingException(artifact.getId(), 
"Error reading project artifact.", e);
                }
-
-        project = buildWithProfiles( domainModel, configuration, 
artifact.getFile() );
         
+        List<Profile> projectProfiles;
+        try
+        {
+               projectProfiles = 
ProfileContext.getActiveProfilesFrom(configuration, domainModel.getModel(), 
container);
+        }
+        catch ( ProfileActivationException e )
+        {
+            throw new ProjectBuildingException( "", "Failed to activate pom 
profiles.");
+        }   
+        catch(IOException e)
+        {
+               throw new ProjectBuildingException( "", "Failed to activate pom 
profiles.");    
+        }
+        
+        try
+        {
+            domainModel = ProcessorContext.mergeProfilesIntoModel( 
projectProfiles, domainModel );
+        }
+        catch ( IOException e )
+        {
+            throw new ProjectBuildingException("", "");
+        }
+        project = interpolateDomainModel( domainModel, configuration, 
artifact.getFile() );
+        project.setActiveProfiles( projectProfiles );
         artifact.setFile( artifact.getFile() );
         project.setVersion( artifact.getVersion() );
 
@@ -210,6 +263,10 @@
     public MavenProject buildFromRepository( Artifact artifact, 
List<ArtifactRepository> remoteRepositories, ArtifactRepository localRepository 
)
         throws ProjectBuildingException
     {
+       if(remoteRepositories == null)
+       {
+               throw new IllegalArgumentException("repositories: null");
+       }
         ProjectBuilderConfiguration configuration = new 
DefaultProjectBuilderConfiguration()        
         .setLocalRepository( localRepository )
         .setRemoteRepositories(remoteRepositories);
@@ -290,8 +347,8 @@
 
         return new MavenProjectBuildingResult( project, result );
     }
-
-    private MavenProject buildWithProfiles( PomClassicDomainModel domainModel, 
ProjectBuilderConfiguration config, File projectDescriptor )
+    
+    private MavenProject interpolateDomainModel( PomClassicDomainModel 
domainModel, ProjectBuilderConfiguration config, File projectDescriptor )
         throws ProjectBuildingException
     {
        Model model;
@@ -303,20 +360,8 @@
                {
                        throw new ProjectBuildingException("", e.getMessage());
                }
-               File parentDescriptor = domainModel.getParentFile();
                
         String projectId = safeVersionlessKey( model.getGroupId(), 
model.getArtifactId() );
-
-        List<Profile> projectProfiles;
-        try
-        {
-               projectProfiles = ProfileContext.getActiveProfilesFrom(config, 
model, container);
-        }
-        catch ( ProfileActivationException e )
-        {
-            throw new ProjectBuildingException( projectId, "Failed to activate 
pom profiles.", projectDescriptor,
-                                                e );
-        }
         
         List<InterpolatorProperty> interpolatorProperties = new 
ArrayList<InterpolatorProperty>();
         interpolatorProperties.addAll( 
InterpolatorProperty.toInterpolatorProperties( config.getExecutionProperties(), 
PomInterpolatorTag.EXECUTION_PROPERTIES.name() ) );
@@ -326,25 +371,26 @@
         {
             interpolatorProperties.add( new InterpolatorProperty( 
"${build.timestamp}", new SimpleDateFormat( "yyyyMMdd-hhmm" ).format( 
config.getBuildStartTime() ),
                                                                   
PomInterpolatorTag.PROJECT_PROPERTIES.name() ) );
-        }
-
-        try
-        {
-            PomClassicDomainModel dm = 
ProcessorContext.mergeProfilesIntoModel( projectProfiles, domainModel );
-            List<ModelProperty> mps = dm.getModelProperties();
-            ProcessorContext.interpolateModelProperties( mps, 
interpolatorProperties, dm );
-            if ( dm.getProjectDirectory() != null )
+        }      
+            try
             {
-                mps = ProcessorContext.alignPaths( mps, 
dm.getProjectDirectory() );
+               List<ModelProperty> mps = domainModel.getModelProperties();
+               ProcessorContext.interpolateModelProperties( mps, 
interpolatorProperties, domainModel );
+               if ( domainModel.getProjectDirectory() != null )
+               {
+                       mps = ProcessorContext.alignPaths( mps, 
domainModel.getProjectDirectory() );
+               }
+               File f = domainModel.getParentFile();
+               domainModel = new PomClassicDomainModel( mps, false );
+               domainModel.setParentFile(f);
+               model = domainModel.getModel();
+
             }
-            dm = new PomClassicDomainModel( mps, false );
-            model = dm.getModel();
-        }
-        catch ( IOException e )
-        {
+            catch ( IOException e )
+            {
 
-            throw new ProjectBuildingException( projectId, "", 
projectDescriptor, e );
-        }   
+                throw new ProjectBuildingException(projectId, "", 
projectDescriptor, e);
+            }   
 
         MavenProject project;
 
@@ -357,7 +403,7 @@
             Artifact projectArtifact = repositorySystem.createArtifact( 
project.getGroupId(), project.getArtifactId(), project.getVersion(), null, 
project.getPackaging() );
             project.setArtifact( projectArtifact );
 
-            project.setParentFile( parentDescriptor );
+            project.setParentFile( domainModel.getParentFile() );
 
         }
         catch ( InvalidRepositoryException e )
@@ -365,8 +411,6 @@
             throw new InvalidProjectModelException( projectId, e.getMessage(), 
projectDescriptor, e );
         }
 
-        project.setActiveProfiles( projectProfiles );
-
         return project;
     }
     
@@ -429,7 +473,7 @@
                        Collection<Profile> profiles = 
profileContext1.getActiveProfiles();
                        if(!profiles.isEmpty())
                        {
-                               
profileModels.add(ProcessorContext.mergeProfilesIntoModel( 
profileContext1.getActiveProfiles(), dm ));  
+                               
profileModels.add(ProcessorContext.mergeProfilesIntoModel( profiles, dm ));  
                        }
                        else
                        {

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=761609&r1=761608&r2=761609&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
 Fri Apr  3 10:56:06 2009
@@ -240,7 +240,7 @@
         }
         */
 
-        setRemoteArtifactRepositories( 
projectBuilderConfiguration.getRemoteRepositories() );       
+        setRemoteArtifactRepositories( 
(projectBuilderConfiguration.getRemoteRepositories() != null) ? 
projectBuilderConfiguration.getRemoteRepositories() : new 
ArrayList<ArtifactRepository>());       
     }
 
     /**


Reply via email to