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 2008/03/28 00:31:05 UTC

svn commit: r642024 - in /maven/components/branches/maven-2.0.x: maven-core/src/main/java/org/apache/maven/ maven-core/src/main/java/org/apache/maven/cli/ maven-core/src/main/java/org/apache/maven/execution/ maven-core/src/test/java/org/apache/maven/cl...

Author: jdcasey
Date: Thu Mar 27 16:30:59 2008
New Revision: 642024

URL: http://svn.apache.org/viewvc?rev=642024&view=rev
Log:
[MNG-2339] Reinstate command-line override of properties like ${version}, to preserve backward compatibility. This is done WITHOUT reinstating the use of system properties for interpolation (at least, in the first pass of interpolation)...which means POM values will have precedence over sysprops, and cli properties will have precedence over POM values.

Added:
    maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java   (with props)
    maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java   (with props)
Modified:
    maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
    maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java
    maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
    maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
    maven/components/branches/maven-2.0.x/maven-core/src/test/java/org/apache/maven/cli/MavenCliTest.java
    maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java
    maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/profiles/ProfileManager.java
    maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java

Modified: maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/DefaultMaven.java?rev=642024&r1=642023&r2=642024&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/DefaultMaven.java (original)
+++ maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/DefaultMaven.java Thu Mar 27 16:30:59 2008
@@ -25,19 +25,23 @@
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
 import org.apache.maven.execution.BuildFailure;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
 import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.execution.ReactorManager;
 import org.apache.maven.execution.RuntimeInformation;
 import org.apache.maven.lifecycle.LifecycleExecutionException;
 import org.apache.maven.lifecycle.LifecycleExecutor;
+import org.apache.maven.monitor.event.DefaultEventDispatcher;
 import org.apache.maven.monitor.event.EventDispatcher;
 import org.apache.maven.monitor.event.MavenEvents;
 import org.apache.maven.profiles.ProfileManager;
 import org.apache.maven.profiles.activation.ProfileActivationException;
+import org.apache.maven.project.DefaultProjectBuilderConfiguration;
 import org.apache.maven.project.DuplicateProjectException;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuilderConfiguration;
 import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.reactor.MavenExecutionException;
 import org.apache.maven.settings.Mirror;
@@ -70,6 +74,7 @@
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Properties;
 import java.util.TimeZone;
 
 /**
@@ -284,7 +289,7 @@
         getLogger().info( "Scanning for projects..." );
 
         boolean foundProjects = true;
-        List projects = getProjects( request, globalProfileManager );
+        List projects = getProjects( request );
         if ( projects.isEmpty() )
         {
             projects.add( getSuperProject( request ) );
@@ -349,7 +354,7 @@
         return superProject;
     }
 
-    private List getProjects( MavenExecutionRequest request, ProfileManager globalProfileManager )
+    private List getProjects( MavenExecutionRequest request )
         throws MavenExecutionException, BuildFailureException
     {
         List projects;
@@ -357,8 +362,7 @@
         {
             List files = getProjectFiles( request );
 
-            projects = collectProjects( files, request.getLocalRepository(), request.isRecursive(),
-                                        request.getSettings(), globalProfileManager, !request.isReactorActive() );
+            projects = collectProjects( files, request, !request.isReactorActive() );
 
         }
         catch ( IOException e )
@@ -434,11 +438,12 @@
         return fmt.format( new Date( time ) );
     }
 
-    private List collectProjects( List files, ArtifactRepository localRepository, boolean recursive, Settings settings,
-                                  ProfileManager globalProfileManager, boolean isRoot )
+    private List collectProjects( List files, MavenExecutionRequest request, boolean isRoot )
         throws ArtifactResolutionException, ProjectBuildingException, ProfileActivationException,
         MavenExecutionException, BuildFailureException
     {
+//        .getLocalRepository(), request.isRecursive(),
+//        request.getSettings(), request.getUserProperties(), requ, !request.isReactorActive()
         List projects = new ArrayList( files.size() );
 
         for ( Iterator iterator = files.iterator(); iterator.hasNext(); )
@@ -453,7 +458,7 @@
                 usingReleasePom = true;
             }
 
-            MavenProject project = getProject( file, localRepository, settings, globalProfileManager );
+            MavenProject project = getProject( file, request );
 
             if ( isRoot )
             {
@@ -470,7 +475,7 @@
                 }
             }
 
-            if ( ( project.getModules() != null ) && !project.getModules().isEmpty() && recursive )
+            if ( ( project.getModules() != null ) && !project.getModules().isEmpty() && request.isRecursive() )
             {
                 // TODO: Really should fail if it was not? What if it is aggregating - eg "ear"?
                 project.setPackaging( "pom" );
@@ -527,7 +532,7 @@
                 }
 
                 List collectedProjects =
-                    collectProjects( moduleFiles, localRepository, recursive, settings, globalProfileManager, false );
+                    collectProjects( moduleFiles, request, false );
                 projects.addAll( collectedProjects );
                 project.setCollectedProjects( collectedProjects );
             }
@@ -537,8 +542,28 @@
         return projects;
     }
 
+    /**
+     * @deprecated Use {@link DefaultMaven#getProject(File, MavenExecutionRequest)} instead.
+     */
     public MavenProject getProject( File pom, ArtifactRepository localRepository, Settings settings,
-                                    ProfileManager globalProfileManager )
+                                    Properties userProperties, ProfileManager globalProfileManager )
+        throws ProjectBuildingException, ArtifactResolutionException, ProfileActivationException
+    {
+        MavenExecutionRequest request = new DefaultMavenExecutionRequest(
+                                                                      localRepository,
+                                                                      settings,
+                                                                      new DefaultEventDispatcher(),
+                                                                      Collections.EMPTY_LIST,
+                                                                      pom.getParentFile()
+                                                                         .getAbsolutePath(),
+                                                                      globalProfileManager,
+                                                                      globalProfileManager.getRequestProperties(),
+                                                                      new Properties(), false );
+
+        return getProject( pom, request );
+    }
+
+    public MavenProject getProject( File pom, MavenExecutionRequest request )
         throws ProjectBuildingException, ArtifactResolutionException, ProfileActivationException
     {
         if ( pom.exists() )
@@ -550,7 +575,12 @@
             }
         }
 
-        return projectBuilder.build( pom, localRepository, globalProfileManager );
+        ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration();
+        config.setLocalRepository( request.getLocalRepository() )
+              .setGlobalProfileManager( request.getGlobalProfileManager() )
+              .setUserProperties( request.getUserProperties() );
+
+        return projectBuilder.build( pom, config );
     }
 
     // ----------------------------------------------------------------------

Modified: maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java?rev=642024&r1=642023&r2=642024&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java (original)
+++ maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java Thu Mar 27 16:30:59 2008
@@ -19,16 +19,6 @@
  * under the License.
  */
 
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.Map.Entry;
-
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
 import org.apache.commons.cli.GnuParser;
@@ -68,6 +58,16 @@
 import org.codehaus.plexus.util.cli.CommandLineUtils;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.StringTokenizer;
+import java.util.Map.Entry;
+
 /**
  * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
  * @version $Id$
@@ -180,7 +180,9 @@
         // are constructed.
         // ----------------------------------------------------------------------
 
-        Properties executionProperties = getExecutionProperties( commandLine );
+        Properties executionProperties = new Properties();
+        Properties userProperties = new Properties();
+        populateProperties( commandLine, executionProperties, userProperties );
 
         Settings settings;
 
@@ -253,7 +255,7 @@
             }
 
             request = createRequest( commandLine, settings, eventDispatcher, loggerManager, profileManager,
-                                     executionProperties, showErrors );
+                                     executionProperties, userProperties, showErrors );
 
             setProjectFileOptions( commandLine, request );
 
@@ -404,7 +406,7 @@
     private static MavenExecutionRequest createRequest( CommandLine commandLine, Settings settings,
                                                         EventDispatcher eventDispatcher, LoggerManager loggerManager,
                                                         ProfileManager profileManager, Properties executionProperties,
-                                                        boolean showErrors )
+                                                        Properties userProperties, boolean showErrors )
         throws ComponentLookupException
     {
         MavenExecutionRequest request;
@@ -415,7 +417,7 @@
 
         request = new DefaultMavenExecutionRequest( localRepository, settings, eventDispatcher,
                                                     commandLine.getArgList(), userDir.getPath(), profileManager,
-                                                    executionProperties, showErrors );
+                                                    executionProperties, userProperties, showErrors );
 
         // TODO [BP]: do we set one per mojo? where to do it?
         Logger logger = loggerManager.getLoggerForComponent( Mojo.ROLE );
@@ -572,10 +574,8 @@
     // System properties handling
     // ----------------------------------------------------------------------
 
-    static Properties getExecutionProperties( CommandLine commandLine )
+    static void populateProperties( CommandLine commandLine, Properties executionProperties, Properties userProperties )
     {
-        Properties executionProperties = new Properties();
-
         // add the env vars to the property set, with the "env." prefix
         // XXX support for env vars should probably be removed from the ModelInterpolator
         try
@@ -607,17 +607,17 @@
             {
                 for ( int i = 0; i < defStrs.length; ++i )
                 {
-                    setCliProperty( defStrs[i], executionProperties );
+                    setCliProperty( defStrs[i], userProperties );
                 }
             }
+
+            executionProperties.putAll( userProperties );
         }
 
         executionProperties.putAll( System.getProperties() );
-
-        return executionProperties;
     }
 
-    private static void setCliProperty( String property, Properties executionProperties )
+    private static void setCliProperty( String property, Properties requestProperties )
     {
         String name;
 
@@ -638,7 +638,7 @@
             value = property.substring( i + 1 ).trim();
         }
 
-        executionProperties.setProperty( name, value );
+        requestProperties.setProperty( name, value );
 
         // ----------------------------------------------------------------------
         // I'm leaving the setting of system properties here as not to break

Modified: maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java?rev=642024&r1=642023&r2=642024&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java (original)
+++ maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java Thu Mar 27 16:30:59 2008
@@ -63,6 +63,8 @@
 
     private final Properties executionProperties;
 
+    private final Properties userProperties;
+
     private final Date startTime;
 
     private final boolean showErrors;
@@ -70,6 +72,7 @@
     public DefaultMavenExecutionRequest( ArtifactRepository localRepository, Settings settings,
                                          EventDispatcher eventDispatcher, List goals, String baseDirectory,
                                          ProfileManager globalProfileManager, Properties executionProperties,
+                                         Properties userProperties,
                                          boolean showErrors )
     {
         this.localRepository = localRepository;
@@ -86,7 +89,9 @@
 
         this.executionProperties = executionProperties;
 
-        this.startTime = new Date();
+        this.userProperties = userProperties;
+
+        startTime = new Date();
 
         this.showErrors = showErrors;
     }
@@ -193,5 +198,10 @@
     public boolean isShowErrors()
     {
         return showErrors;
+    }
+
+    public Properties getUserProperties()
+    {
+        return userProperties;
     }
 }

Modified: maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java?rev=642024&r1=642023&r2=642024&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java (original)
+++ maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java Thu Mar 27 16:30:59 2008
@@ -71,6 +71,8 @@
 
     Properties getExecutionProperties();
 
+    Properties getUserProperties();
+
     Date getStartTime();
 
     boolean isShowErrors();

Modified: maven/components/branches/maven-2.0.x/maven-core/src/test/java/org/apache/maven/cli/MavenCliTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-core/src/test/java/org/apache/maven/cli/MavenCliTest.java?rev=642024&r1=642023&r2=642024&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-core/src/test/java/org/apache/maven/cli/MavenCliTest.java (original)
+++ maven/components/branches/maven-2.0.x/maven-core/src/test/java/org/apache/maven/cli/MavenCliTest.java Thu Mar 27 16:30:59 2008
@@ -19,13 +19,13 @@
  * under the License.
  */
 
+import org.codehaus.classworlds.ClassWorld;
+import org.codehaus.plexus.util.StringOutputStream;
+
 import java.io.OutputStream;
 import java.io.PrintStream;
 import java.util.Properties;
 
-import org.codehaus.classworlds.ClassWorld;
-import org.codehaus.plexus.util.StringOutputStream;
-
 import junit.framework.TestCase;
 
 /**
@@ -86,20 +86,30 @@
     {
         System.setProperty( "test.property.1", "1.0" );
         System.setProperty( "test.property.2", "2.0" );
-        Properties p = MavenCli.getExecutionProperties( ( new MavenCli.CLIManager() ).parse( new String[] {
+        Properties execProperties = new Properties();
+        Properties userProperties = new Properties();
+
+        MavenCli.populateProperties( ( new MavenCli.CLIManager() ).parse( new String[] {
             "-Dtest.property.2=2.1",
-            "-Dtest.property.3=3.0" } ) );
+            "-Dtest.property.3=3.0" } ), execProperties, userProperties );
 
         // assume that everybody has a PATH env var
-        String envPath = p.getProperty( "env.PATH" );
+        String envPath = execProperties.getProperty( "env.PATH" );
+        String envPath2 = userProperties.getProperty( "env.PATH" );
         if ( envPath == null )
         {
-            envPath = p.getProperty( "env.Path" );
+            envPath = execProperties.getProperty( "env.Path" );
+            envPath2 = userProperties.getProperty( "env.Path" );
         }
+
         assertNotNull( envPath );
+        assertNull( envPath2 );
+
+        assertEquals( "1.0", execProperties.getProperty( "test.property.1" ) );
+        assertNull( userProperties.getProperty( "test.property.1" ) );
 
-        assertEquals( "1.0", p.getProperty( "test.property.1" ) );
-        assertEquals( "3.0", p.getProperty( "test.property.3" ) );
+        assertEquals( "3.0", execProperties.getProperty( "test.property.3" ) );
+        assertEquals( "3.0", userProperties.getProperty( "test.property.3" ) );
 
         // sys props should override cmdline props
         //assertEquals( "2.0", p.getProperty( "test.property.2" ) );

Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java?rev=642024&r1=642023&r2=642024&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java (original)
+++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java Thu Mar 27 16:30:59 2008
@@ -19,7 +19,6 @@
  * under the License.
  */
 
-import java.util.Properties;
 import org.apache.maven.model.Activation;
 import org.apache.maven.model.Profile;
 import org.apache.maven.profiles.activation.ProfileActivationException;
@@ -32,9 +31,10 @@
 
 import java.util.ArrayList;
 import java.util.Iterator;
-import java.util.List;
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.Map.Entry;
 
 public class DefaultProfileManager
@@ -49,9 +49,8 @@
     private List defaultIds = new ArrayList();
 
     private Map profilesById = new LinkedHashMap();
-    
-    // default fallback..
-    private Properties systemProperties = System.getProperties();
+
+    private Properties requestProperties;
 
     /**
      * @deprecated without passing in the system properties, the SystemPropertiesProfileActivator will not work correctly
@@ -61,7 +60,7 @@
     {
         this( container, (Settings)null);
     }
-    
+
     /**
      * the properties passed to the profile manager are the props that
      * are passed to maven, possibly containing profile activator properties
@@ -70,7 +69,7 @@
     public DefaultProfileManager( PlexusContainer container, Properties props )
     {
         this( container, (Settings)null, props );
-        
+
     }
 
     /**
@@ -83,7 +82,7 @@
 
         loadSettingsProfiles( settings );
     }
-    
+
     /**
      * the properties passed to the profile manager are the props that
      * are passed to maven, possibly containing profile activator properties
@@ -94,15 +93,15 @@
         this.container = container;
 
         loadSettingsProfiles( settings );
-        
+
         if ( props != null )
         {
-            systemProperties = props;
+            requestProperties = props;
         }
     }
-    
-    public Properties getSystemProperties() {
-        return systemProperties;
+
+    public Properties getRequestProperties() {
+        return requestProperties;
     }
 
     public Map getProfilesById()
@@ -211,7 +210,7 @@
             {
                 shouldAdd = true;
             }
-            
+
             if ( shouldAdd )
             {
                 if ( "pom".equals( profile.getSource() ) )
@@ -236,9 +235,9 @@
                 activeFromPom.add( profile );
             }
         }
-        
+
         List allActive = new ArrayList( activeFromPom.size() + activeExternal.size() );
-        
+
         allActive.addAll( activeExternal );
         allActive.addAll( activeFromPom );
 
@@ -249,6 +248,12 @@
         throws ProfileActivationException
     {
         List activators = null;
+        Properties systemProperties = new Properties( System.getProperties() );
+        if ( requestProperties != null )
+        {
+            systemProperties.putAll( requestProperties );
+        }
+
         container.addContextValue("SystemProperties", systemProperties);
         try
         {

Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/profiles/ProfileManager.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/profiles/ProfileManager.java?rev=642024&r1=642023&r2=642024&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/profiles/ProfileManager.java (original)
+++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/profiles/ProfileManager.java Thu Mar 27 16:30:59 2008
@@ -25,6 +25,7 @@
 
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 public interface ProfileManager
 {
@@ -55,5 +56,7 @@
     List getIdsActivatedByDefault();
 
     void loadSettingsProfiles( Settings settings );
-    
+
+    Properties getRequestProperties();
+
 }

Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=642024&r1=642023&r2=642024&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Thu Mar 27 16:30:59 2008
@@ -95,6 +95,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.Set;
 import java.util.TreeMap;
 
@@ -190,12 +191,28 @@
     // MavenProjectBuilder Implementation
     // ----------------------------------------------------------------------
 
+    public MavenProject build( File pom,
+                               ProjectBuilderConfiguration config )
+        throws ProjectBuildingException
+    {
+        return buildFromSourceFileInternal( pom, config, true );
+    }
+
+    public MavenProject build( File pom,
+                               ProjectBuilderConfiguration config,
+                               boolean checkDistributionManagementStatus )
+        throws ProjectBuildingException
+    {
+        return buildFromSourceFileInternal( pom, config, checkDistributionManagementStatus );
+    }
+
     public MavenProject build( File projectDescriptor,
                                ArtifactRepository localRepository,
                                ProfileManager profileManager )
         throws ProjectBuildingException
     {
-        return buildFromSourceFileInternal( projectDescriptor, localRepository, profileManager, true );
+        ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository ).setGlobalProfileManager( profileManager );
+        return buildFromSourceFileInternal( projectDescriptor, config, true );
     }
 
     public MavenProject build( File projectDescriptor,
@@ -204,8 +221,8 @@
                                boolean checkDistributionManagementStatus )
         throws ProjectBuildingException
     {
-        return buildFromSourceFileInternal( projectDescriptor, localRepository, profileManager,
-                                            checkDistributionManagementStatus );
+        ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository ).setGlobalProfileManager( profileManager );
+        return buildFromSourceFileInternal( projectDescriptor, config, checkDistributionManagementStatus );
     }
 
     // jvz:note
@@ -231,7 +248,9 @@
 
         Model model = findModelFromRepository( artifact, remoteArtifactRepositories, localRepository, allowStubModel );
 
-        return buildInternal( "Artifact [" + artifact + "]", model, localRepository, remoteArtifactRepositories, null,
+        ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository );
+
+        return buildInternal( "Artifact [" + artifact + "]", model, config, remoteArtifactRepositories,
                               null, false );
     }
 
@@ -289,7 +308,7 @@
 
         try
         {
-            project = processProjectLogic( "<Super-POM>", project, null, null, null, null, true, true );
+            project = processProjectLogic( "<Super-POM>", project, null, null, null, true, true );
 
             project.setExecutionRoot( true );
 
@@ -467,16 +486,15 @@
     }
 
     private MavenProject buildFromSourceFileInternal( File projectDescriptor,
-                                                      ArtifactRepository localRepository,
-                                                      ProfileManager profileManager,
+                                                      ProjectBuilderConfiguration config,
                                                       boolean checkDistributionManagementStatus )
         throws ProjectBuildingException
     {
         Model model = readModel( "unknown", projectDescriptor, true );
 
-        MavenProject project = buildInternal( projectDescriptor.getAbsolutePath(), model, localRepository,
+        MavenProject project = buildInternal( projectDescriptor.getAbsolutePath(), model, config,
                                               buildArtifactRepositories( getSuperModel() ), projectDescriptor,
-                                              profileManager, true );
+                                              true );
 
         if ( checkDistributionManagementStatus )
         {
@@ -697,10 +715,9 @@
     // is a real file and sometimes null which makes things confusing.
     private MavenProject buildInternal( String pomLocation,
                                         Model model,
-                                        ArtifactRepository localRepository,
+                                        ProjectBuilderConfiguration config,
                                         List parentSearchRepositories,
                                         File projectDescriptor,
-                                        ProfileManager externalProfileManager,
                                         boolean strict )
         throws ProjectBuildingException
     {
@@ -713,14 +730,13 @@
 
         Model superModel = getSuperModel();
 
-        //TODO mkleint - use the (Container, Properties) constructor to make system properties embeddable
-        // shall the ProfileManager intefrace expose the properties?
-
+        ProfileManager externalProfileManager = config.getGlobalProfileManager();
         ProfileManager superProjectProfileManager;
-        if ( externalProfileManager instanceof DefaultProfileManager )
+        if ( externalProfileManager != null )
         {
-            superProjectProfileManager = new DefaultProfileManager( container,
-                                                                    ( (DefaultProfileManager) externalProfileManager ).getSystemProperties() );
+            superProjectProfileManager = new DefaultProfileManager(
+                                                                    container,
+                                                                    externalProfileManager.getRequestProperties() );
         }
         else
         {
@@ -791,8 +807,8 @@
         MavenProject project = null;
         try
         {
-            project = assembleLineage( model, lineage, localRepository, projectDir, parentSearchRepositories,
-                                       aggregatedRemoteWagonRepositories, externalProfileManager, strict );
+            project = assembleLineage( model, lineage, config, projectDir, parentSearchRepositories,
+                                       aggregatedRemoteWagonRepositories, strict );
         }
         catch ( InvalidRepositoryException e )
         {
@@ -848,7 +864,7 @@
 
         try
         {
-            project = processProjectLogic( pomLocation, project, externalProfileManager, projectDir, localRepository, repositories, strict, false );
+            project = processProjectLogic( pomLocation, project, config, projectDir, repositories, strict, false );
         }
         catch ( ModelInterpolationException e )
         {
@@ -934,9 +950,8 @@
      */
     private MavenProject processProjectLogic( String pomLocation,
                                               MavenProject project,
-                                              ProfileManager profileMgr,
+                                              ProjectBuilderConfiguration config,
                                               File projectDir,
-                                              ArtifactRepository localRepository,
                                               List remoteRepositories,
                                               boolean strict,
                                               boolean isSuperPom )
@@ -951,6 +966,8 @@
             activeProfiles = new ArrayList();
         }
 
+        ProfileManager profileMgr = config == null ? null : config.getGlobalProfileManager();
+
         List injectedProfiles = injectActiveProfiles( profileMgr, model );
 
         activeProfiles.addAll( injectedProfiles );
@@ -976,8 +993,18 @@
             context.put( "build.testSourceDirectory", pathTranslator.alignToBaseDirectory( build.getTestSourceDirectory(), projectDir ) );
         }
 
+        if ( !isSuperPom )
+        {
+            Properties userProps = config.getUserProperties();
+            if ( userProps != null )
+            {
+                context.putAll( userProps );
+            }
+        }
+
         model = modelInterpolator.interpolate( model, context, strict );
 
+        // second pass allows ${user.home} to work, if it needs to.
         // [MNG-2339] ensure the system properties are still interpolated for backwards compat, but the model values must win
         context.putAll( System.getProperties() );
         model = modelInterpolator.interpolate( model, context, strict );
@@ -985,7 +1012,7 @@
         // MNG-3482: Make sure depMgmt is interpolated before merging.
         if ( !isSuperPom )
         {
-            mergeManagedDependencies( model, localRepository, remoteRepositories );
+            mergeManagedDependencies( model, config.getLocalRepository(), remoteRepositories );
         }
 
         // interpolation is before injection, because interpolation is off-limits in the injected variables
@@ -1087,11 +1114,10 @@
      */
     private MavenProject assembleLineage( Model model,
                                           LinkedList lineage,
-                                          ArtifactRepository localRepository,
+                                          ProjectBuilderConfiguration config,
                                           File projectDir,
                                           List parentSearchRepositories,
                                           Set aggregatedRemoteWagonRepositories,
-                                          ProfileManager externalProfileManager,
                                           boolean strict )
         throws ProjectBuildingException, InvalidRepositoryException
     {
@@ -1113,15 +1139,15 @@
             }
         }
 
-        //TODO mkleint - use the (Container, Properties constructor to make system properties embeddable
+        ProfileManager externalProfileManager = config.getGlobalProfileManager();
         ProfileManager profileManager;
-        if ( ( externalProfileManager != null ) && ( externalProfileManager instanceof DefaultProfileManager ) )
+        if ( externalProfileManager != null )
         {
-            profileManager = new DefaultProfileManager( container,
-                                                        ( (DefaultProfileManager) externalProfileManager ).getSystemProperties() );
+            profileManager = new DefaultProfileManager( container, externalProfileManager.getRequestProperties() );
         }
         else
         {
+            //TODO mkleint - use the (Container, Properties constructor to make system properties embeddable
             profileManager = new DefaultProfileManager( container );
         }
 
@@ -1322,7 +1348,7 @@
 
                 try
                 {
-                    model = findModelFromRepository( parentArtifact, remoteRepositories, localRepository, false );
+                    model = findModelFromRepository( parentArtifact, remoteRepositories, config.getLocalRepository(), false );
                 }
                 catch ( ProjectBuildingException e )
                 {
@@ -1343,9 +1369,13 @@
                 parentProjectDir = parentDescriptor.getParentFile();
             }
 
-            MavenProject parent = assembleLineage( model, lineage, localRepository, parentProjectDir,
-                                                   parentSearchRepositories, aggregatedRemoteWagonRepositories,
-                                                   externalProfileManager, strict );
+            MavenProject parent = assembleLineage( model,
+                                                   lineage,
+                                                   config,
+                                                   parentProjectDir,
+                                                   parentSearchRepositories,
+                                                   aggregatedRemoteWagonRepositories,
+                                                   strict );
 
             parent.setFile( parentDescriptor );
 
@@ -1732,4 +1762,5 @@
     {
         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
     }
+
 }

Added: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java?rev=642024&view=auto
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java (added)
+++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java Thu Mar 27 16:30:59 2008
@@ -0,0 +1,55 @@
+package org.apache.maven.project;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.profiles.ProfileManager;
+
+import java.util.Properties;
+
+public class DefaultProjectBuilderConfiguration
+    implements ProjectBuilderConfiguration
+{
+
+    private ProfileManager globalProfileManager;
+
+    private ArtifactRepository localRepository;
+
+    private Properties userProperties;
+
+    public DefaultProjectBuilderConfiguration()
+    {
+    }
+
+    public ProjectBuilderConfiguration setGlobalProfileManager( ProfileManager globalProfileManager )
+    {
+        this.globalProfileManager = globalProfileManager;
+        return this;
+    }
+
+    public ProfileManager getGlobalProfileManager()
+    {
+        return globalProfileManager;
+    }
+
+    public ProjectBuilderConfiguration setLocalRepository( ArtifactRepository localRepository )
+    {
+        this.localRepository = localRepository;
+        return this;
+    }
+
+    public ArtifactRepository getLocalRepository()
+    {
+        return localRepository;
+    }
+
+    public ProjectBuilderConfiguration setUserProperties( Properties userProperties )
+    {
+        this.userProperties = userProperties;
+        return this;
+    }
+
+    public Properties getUserProperties()
+    {
+        return userProperties;
+    }
+
+}

Propchange: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java?rev=642024&r1=642023&r2=642024&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java (original)
+++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java Thu Mar 27 16:30:59 2008
@@ -91,10 +91,19 @@
 
     MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository )
         throws ProjectBuildingException;
-    
+
     /**
      * need to pass a profilemanager with correct context (eg. with execution properties)
      */
     MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository, ProfileManager profileManager )
+        throws ProjectBuildingException;
+
+    MavenProject build( File pom,
+                        ProjectBuilderConfiguration config )
+        throws ProjectBuildingException;
+
+    MavenProject build( File pom,
+                        ProjectBuilderConfiguration config,
+                        boolean checkDistributionManagementStatus )
         throws ProjectBuildingException;
 }

Added: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java?rev=642024&view=auto
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java (added)
+++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java Thu Mar 27 16:30:59 2008
@@ -0,0 +1,23 @@
+package org.apache.maven.project;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.profiles.ProfileManager;
+
+import java.util.Properties;
+
+public interface ProjectBuilderConfiguration
+{
+
+    ArtifactRepository getLocalRepository();
+
+    ProfileManager getGlobalProfileManager();
+
+    Properties getUserProperties();
+
+    ProjectBuilderConfiguration setGlobalProfileManager( ProfileManager globalProfileManager );
+
+    ProjectBuilderConfiguration setLocalRepository( ArtifactRepository localRepository );
+
+    ProjectBuilderConfiguration setUserProperties( Properties userProperties );
+
+}

Propchange: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"