You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2007/09/07 09:54:13 UTC

svn commit: r573494 - in /maven/components/trunk: maven-core/src/main/java/org/apache/maven/execution/ maven-core/src/main/java/org/apache/maven/settings/ maven-core/src/main/mdo/ maven-core/src/test/java/org/apache/maven/settings/ maven-embedder/src/m...

Author: jvanzyl
Date: Fri Sep  7 00:54:11 2007
New Revision: 573494

URL: http://svn.apache.org/viewvc?rev=573494&view=rev
Log:
o scrub of the settings building, was able to reduce to the need of the build context and use the execution request
  directly. eventually i will get it to be the session, along with the profile tools, then all the tools can also 
  share a common interpolator, which can then be shared by other components instead of having 5 interpolators lying
  around causing a great deal of inconsistency.

Removed:
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/RuntimeInfo.java
Modified:
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java
    maven/components/trunk/maven-core/src/main/mdo/settings.mdo
    maven/components/trunk/maven-core/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java
    maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
    maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java
    maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/MavenExecutionRequestPopulator.java
    maven/components/trunk/maven-embedder/src/main/resources/META-INF/plexus/components.xml
    maven/components/trunk/maven-embedder/src/test/java/org/apache/maven/embedder/MavenEmbedderExampleTest.java

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java?rev=573494&r1=573493&r2=573494&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java Fri Sep  7 00:54:11 2007
@@ -32,7 +32,7 @@
 import java.util.Properties;
 
 /**
- * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ * @author Jason van Zyl
  * @version $Id$
  */
 public class DefaultMavenExecutionRequest
@@ -61,6 +61,16 @@
     private boolean isProjectPresent = true;
 
     // ----------------------------------------------------------------------------
+    // We need to allow per execution user and global settings as the embedder
+    // might be running in a mode where its executing many threads with totally
+    // different settings.
+    // ----------------------------------------------------------------------------
+
+    private File userSettingsFile;
+
+    private File globalSettingsFile;
+
+    // ----------------------------------------------------------------------------
     // Request
     // ----------------------------------------------------------------------------
 
@@ -528,6 +538,32 @@
     public MavenExecutionRequest setProjectPresent( boolean projectPresent )
     {
         isProjectPresent = projectPresent;
+
+        return this;
+    }
+
+    // Settings files
+
+    public File getUserSettingsFile()
+    {
+        return userSettingsFile;
+    }
+
+    public MavenExecutionRequest setUserSettingsFile( File userSettingsFile )
+    {
+        this.userSettingsFile = userSettingsFile;
+
+        return this;
+    }
+
+    public File getGlobalSettingsFile()
+    {
+        return globalSettingsFile;
+    }
+
+    public MavenExecutionRequest setGlobalSettingsFile( File globalSettingsFile )
+    {
+        this.globalSettingsFile = globalSettingsFile;
 
         return this;
     }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java?rev=573494&r1=573493&r2=573494&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java Fri Sep  7 00:54:11 2007
@@ -189,4 +189,10 @@
 
     boolean isProjectPresent();
     MavenExecutionRequest setProjectPresent( boolean isProjectPresent );
+
+    File getUserSettingsFile();    
+    MavenExecutionRequest setUserSettingsFile( File userSettingsFile );
+
+    File getGlobalSettingsFile();
+    MavenExecutionRequest setGlobalSettingsFile( File globalSettingsFile );
 }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java?rev=573494&r1=573493&r2=573494&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java Fri Sep  7 00:54:11 2007
@@ -19,8 +19,7 @@
  * under the License.
  */
 
-import org.apache.maven.context.BuildContextManager;
-import org.apache.maven.context.SystemBuildContext;
+import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
 import org.apache.maven.settings.io.xpp3.SettingsXpp3Writer;
 import org.apache.maven.settings.validation.SettingsValidationResult;
@@ -49,18 +48,18 @@
 {
     private SettingsValidator validator;
 
-    private BuildContextManager manager;
-
-    /**
-     * @since 2.1
-     */
-    public Settings buildSettings( File userSettingsFile, File globalSettingsFile )
+    /** @since 2.1 */
+    public Settings buildSettings( MavenExecutionRequest request )        
         throws IOException, XmlPullParserException
     {
+        File userSettingsFile = request.getUserSettingsFile();
+
+        File globalSettingsFile = request.getGlobalSettingsFile();
+
         if ( ( globalSettingsFile == null ) && ( userSettingsFile == null ) )
         {
             getLogger().debug(
-                               "No settings files provided, and default locations are disabled for this request. Returning empty Settings instance." );
+                "No settings files provided, and default locations are disabled for this request. Returning empty Settings instance." );
             return new Settings();
         }
 
@@ -82,37 +81,46 @@
             userSettings = new Settings();
         }
 
-        validateSettings( globalSettings, globalSettingsFile );
-
-        validateSettings( userSettings, userSettingsFile );
-
-        SettingsUtils.merge( userSettings, globalSettings, TrackableBase.GLOBAL_LEVEL );
+        validateSettings(
+            globalSettings,
+            globalSettingsFile );
+
+        validateSettings(
+            userSettings,
+            userSettingsFile );
+
+        SettingsUtils.merge(
+            userSettings,
+            globalSettings,
+            TrackableBase.GLOBAL_LEVEL );
 
-        userSettings = interpolate( userSettings );
+        userSettings = interpolate( userSettings, request );
 
         return userSettings;
     }
 
-    private Settings interpolate( Settings settings )
+    private Settings interpolate( Settings settings, MavenExecutionRequest request )
         throws IOException, XmlPullParserException
     {
         List activeProfiles = settings.getActiveProfiles();
 
         StringWriter writer = new StringWriter();
-        
-        new SettingsXpp3Writer().write( writer, settings );
 
-        String serializedSettings = writer.toString();
+        new SettingsXpp3Writer().write(
+            writer,
+            settings );
 
-        SystemBuildContext sysContext = SystemBuildContext.getSystemBuildContext( manager, true );
+        String serializedSettings = writer.toString();
 
         RegexBasedInterpolator interpolator = new RegexBasedInterpolator();
 
-        interpolator.addValueSource( new PropertiesBasedValueSource( sysContext.getSystemProperties() ) );
+        interpolator.addValueSource( new PropertiesBasedValueSource( request.getProperties() ) );
 
         interpolator.addValueSource( new EnvarBasedValueSource() );
 
-        serializedSettings = interpolator.interpolate( serializedSettings, "settings" );
+        serializedSettings = interpolator.interpolate(
+            serializedSettings,
+            "settings" );
 
         Settings result = new SettingsXpp3Reader().read( new StringReader( serializedSettings ) );
 
@@ -127,52 +135,44 @@
         if ( settingsFile == null )
         {
             getLogger().debug( "Settings file is null. Returning." );
+
             return null;
         }
 
         Settings settings = null;
 
-        if ( settingsFile.exists() && settingsFile.isFile() )
-        {
-            getLogger().debug( "Settings file is a proper file. Reading." );
-
-            FileReader reader = null;
-            try
-            {
-                reader = new FileReader( settingsFile );
+        FileReader reader = null;
 
-                SettingsXpp3Reader modelReader = new SettingsXpp3Reader();
-
-                settings = modelReader.read( reader );
-
-                RuntimeInfo rtInfo = new RuntimeInfo( settings );
+        try
+        {
+            reader = new FileReader( settingsFile );
 
-                rtInfo.addLocation( settingsFile.getAbsolutePath() );
+            SettingsXpp3Reader modelReader = new SettingsXpp3Reader();
 
-                settings.setRuntimeInfo( rtInfo );
-            }
-            catch ( XmlPullParserException e )
-            {
-                getLogger().error( "Failed to read settings from: " + settingsFile + ". Throwing XmlPullParserException..." );
+            settings = modelReader.read( reader );
+        }
+        catch ( XmlPullParserException e )
+        {
+            getLogger().error( "Failed to read settings from: " + settingsFile + ". Throwing XmlPullParserException..." );
 
-                throw e;
-            }
-            catch ( IOException e )
-            {
-                getLogger().error( "Failed to read settings from: " + settingsFile + ". Throwing IOException..." );
+            throw e;
+        }
+        catch ( IOException e )
+        {
+            getLogger().error( "Failed to read settings from: " + settingsFile + ". Throwing IOException..." );
 
-                throw e;
-            }
-            finally
-            {
-                IOUtil.close( reader );
-            }
+            throw e;
+        }
+        finally
+        {
+            IOUtil.close( reader );
         }
 
         return settings;
     }
 
-    private void validateSettings( Settings settings, File location )
+    private void validateSettings( Settings settings,
+                                   File location )
         throws IOException
     {
         SettingsValidationResult validationResult = validator.validate( settings );

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java?rev=573494&r1=573493&r2=573494&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java Fri Sep  7 00:54:11 2007
@@ -19,34 +19,20 @@
  * under the License.
  */
 
+import org.apache.maven.execution.MavenExecutionRequest;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
-import java.io.File;
 import java.io.IOException;
 
 /**
- * Builder for the user or global settings. By default, the settings files are located:
- * <ul>
- * <li>user settings: ${user.home}/settings.xml</li>
- * <li>global settings: ${maven.home}/conf/settings.xml</li>
- * </ul>
- *
  * @author jdcasey
+ * @author Jason van Zyl
  * @version $Id$
  */
 public interface MavenSettingsBuilder
 {
     String ROLE = MavenSettingsBuilder.class.getName();
 
-    /**
-     *
-     * @param userSettingsFile
-     * @param globalSettingsFile
-     * @return a <code>Settings</code> object from the user and global settings file.
-     * @throws IOException if any
-     * @throws XmlPullParserException if any
-     * @since 2.1
-     */
-    Settings buildSettings( File userSettingsFile, File globalSettingsFile )
+    Settings buildSettings( MavenExecutionRequest request )
         throws IOException, XmlPullParserException;
 }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java?rev=573494&r1=573493&r2=573494&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java Fri Sep  7 00:54:11 2007
@@ -73,27 +73,12 @@
                 if ( !dominantActiveProfiles.contains( profileId ) )
                 {
                     dominantActiveProfiles.add( profileId );
-
-                    if ( dominant.getRuntimeInfo() != null )
-                    {
-                        dominant.getRuntimeInfo().setActiveProfileSourceLevel( profileId, recessiveSourceLevel );
-                    }
                 }
             }
         }
 
-        if ( dominant.getRuntimeInfo() != null && recessive.getRuntimeInfo() != null )
-        {
-            List recessiveLocations = recessive.getRuntimeInfo().getLocations();
-            for ( Iterator it = recessiveLocations.iterator(); it.hasNext(); )
-            {
-                String path = (String) it.next();
-
-                dominant.getRuntimeInfo().addLocation( path );
-            }
-        }
-
         List dominantPluginGroupIds = dominant.getPluginGroups();
+
         List recessivePluginGroupIds = recessive.getPluginGroups();
 
         if ( recessivePluginGroupIds != null )
@@ -111,11 +96,6 @@
                 if ( !dominantPluginGroupIds.contains( pluginGroupId ) )
                 {
                     dominantPluginGroupIds.add( pluginGroupId );
-
-                    if ( dominant.getRuntimeInfo() != null )
-                    {
-                        dominant.getRuntimeInfo().setPluginGroupIdSourceLevel( pluginGroupId, recessiveSourceLevel );
-                    }
                 }
             }
         }
@@ -123,11 +103,6 @@
         if ( StringUtils.isEmpty( dominant.getLocalRepository() ) )
         {
             dominant.setLocalRepository( recessive.getLocalRepository() );
-
-            if ( dominant.getRuntimeInfo() != null )
-            {
-                dominant.getRuntimeInfo().setLocalRepositorySourceLevel( recessiveSourceLevel );
-            }
         }
 
         shallowMergeById( dominant.getMirrors(), recessive.getMirrors(), recessiveSourceLevel );

Modified: maven/components/trunk/maven-core/src/main/mdo/settings.mdo
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/mdo/settings.mdo?rev=573494&r1=573493&r2=573494&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/mdo/settings.mdo (original)
+++ maven/components/trunk/maven-core/src/main/mdo/settings.mdo Fri Sep  7 00:54:11 2007
@@ -392,18 +392,6 @@
 
         return profileMap;
     }
-
-    private RuntimeInfo runtimeInfo;
-
-    public void setRuntimeInfo( RuntimeInfo runtimeInfo )
-    {
-        this.runtimeInfo = runtimeInfo;
-    }
-
-    public RuntimeInfo getRuntimeInfo()
-    {
-        return runtimeInfo;
-    }
             ]]>
           </code>
         </codeSegment>

Modified: maven/components/trunk/maven-core/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java?rev=573494&r1=573493&r2=573494&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java (original)
+++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java Fri Sep  7 00:54:11 2007
@@ -32,13 +32,9 @@
         Settings dominant = new Settings();
         dominant.addPluginGroup( "org.apache.maven.plugins" );
         dominant.addPluginGroup( "org.codehaus.modello" );
-        
-        dominant.setRuntimeInfo(new RuntimeInfo(dominant));
 
         Settings recessive = new Settings();
         recessive.addPluginGroup( "org.codehaus.plexus" );
-
-        recessive.setRuntimeInfo(new RuntimeInfo(recessive));
 
         SettingsUtils.merge( dominant, recessive, Settings.GLOBAL_LEVEL );
 

Modified: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java?rev=573494&r1=573493&r2=573494&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java (original)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java Fri Sep  7 00:54:11 2007
@@ -20,14 +20,12 @@
  */
 
 import org.apache.maven.Maven;
-import org.apache.maven.settings.SettingsConfigurationException;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
-import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
@@ -58,6 +56,7 @@
 import org.apache.maven.project.MavenProjectBuildingResult;
 import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.SettingsConfigurationException;
 import org.apache.maven.settings.io.jdom.SettingsJDOMWriter;
 import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
 import org.apache.maven.settings.validation.DefaultSettingsValidator;
@@ -78,7 +77,6 @@
 import org.codehaus.plexus.configuration.PlexusConfigurationException;
 import org.codehaus.plexus.logging.LoggerManager;
 import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 import org.jdom.Document;
 import org.jdom.Element;
@@ -406,7 +404,7 @@
 
         try
         {
-            request = populator.populateDefaults( request, this );
+            request = populator.populateDefaults( request, configuration );
 
             // This is necessary to make the MavenEmbedderProjectWithExtensionReadingTest work which uses
             // a custom type for a dependency like this:
@@ -654,7 +652,7 @@
             // simply cascade values in from requests used for individual executions.
             request = new DefaultMavenExecutionRequest();
 
-            populator.populateDefaults( request, this );
+            populator.populateDefaults( request, configuration );
         }
         catch ( ComponentLookupException e )
         {
@@ -785,98 +783,6 @@
         return result;
     }
 
-    // ----------------------------------------------------------------------
-    // Local Repository
-    // ----------------------------------------------------------------------
-
-    public ArtifactRepository createLocalRepository( Settings settings )
-        throws MavenEmbedderException
-    {
-        String localRepositoryPath = null;
-
-        if ( configuration.getLocalRepository() != null )
-        {
-            localRepositoryPath = configuration.getLocalRepository().getAbsolutePath();
-        }
-
-        if ( StringUtils.isEmpty( localRepositoryPath ) )
-        {
-            localRepositoryPath = settings.getLocalRepository();
-        }
-
-        if ( StringUtils.isEmpty( localRepositoryPath ) )
-        {
-            localRepositoryPath = MavenEmbedder.defaultUserLocalRepository.getAbsolutePath();
-        }
-
-        return createLocalRepository( localRepositoryPath, MavenEmbedder.DEFAULT_LOCAL_REPO_ID );
-    }
-
-    public ArtifactRepository createLocalRepository( String url,
-                                                     String repositoryId )
-        throws MavenEmbedderException
-    {
-        try
-        {
-            return createRepository( canonicalFileUrl( url ), repositoryId );
-        }
-        catch ( IOException e )
-        {
-            throw new MavenEmbedderException( "Unable to resolve canonical path for local repository " + url, e );
-        }
-    }
-
-    private String canonicalFileUrl( String url )
-        throws IOException
-    {
-        if ( !url.startsWith( "file:" ) )
-        {
-            url = "file://" + url;
-        }
-        else if ( url.startsWith( "file:" ) && !url.startsWith( "file://" ) )
-        {
-            url = "file://" + url.substring( "file:".length() );
-        }
-
-        // So now we have an url of the form file://<path>
-
-        // We want to eliminate any relative path nonsense and lock down the path so we
-        // need to fully resolve it before any sub-modules use the path. This can happen
-        // when you are using a custom settings.xml that contains a relative path entry
-        // for the local repository setting.
-
-        File localRepository = new File( url.substring( "file://".length() ) );
-
-        if ( !localRepository.isAbsolute() )
-        {
-            url = "file://" + localRepository.getCanonicalPath();
-        }
-
-        return url;
-    }
-
-    public ArtifactRepository createRepository( String url,
-                                                String repositoryId )
-    {
-        // snapshots vs releases
-        // offline = to turning the update policy off
-
-        //TODO: we'll need to allow finer grained creation of repositories but this will do for now
-
-        String updatePolicyFlag = ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS;
-
-        String checksumPolicyFlag = ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN;
-
-        ArtifactRepositoryPolicy snapshotsPolicy =
-            new ArtifactRepositoryPolicy( true, updatePolicyFlag, checksumPolicyFlag );
-
-        ArtifactRepositoryPolicy releasesPolicy =
-            new ArtifactRepositoryPolicy( true, updatePolicyFlag, checksumPolicyFlag );
-
-        return artifactRepositoryFactory.createArtifactRepository( repositoryId, url, defaultArtifactRepositoryLayout,
-            snapshotsPolicy, releasesPolicy );
-    }
-
     // ----------------------------------------------------------------------------
     // Configuration
     // ----------------------------------------------------------------------------
@@ -902,7 +808,7 @@
 
             try
             {
-                request = populator.populateDefaults( request, this );
+                request = populator.populateDefaults( request, configuration );
             }
             catch ( MavenEmbedderException e )
             {

Modified: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java?rev=573494&r1=573493&r2=573494&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java (original)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java Fri Sep  7 00:54:11 2007
@@ -20,11 +20,12 @@
  */
 
 import org.apache.maven.Maven;
-import org.apache.maven.settings.SettingsConfigurationException;
 import org.apache.maven.artifact.manager.WagonManager;
+import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.embedder.Configuration;
 import org.apache.maven.embedder.MavenEmbedder;
 import org.apache.maven.embedder.MavenEmbedderException;
 import org.apache.maven.execution.MavenExecutionRequest;
@@ -38,6 +39,7 @@
 import org.apache.maven.settings.Proxy;
 import org.apache.maven.settings.Server;
 import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.SettingsConfigurationException;
 import org.apache.maven.settings.SettingsUtils;
 import org.apache.maven.wagon.repository.RepositoryPermissions;
 import org.codehaus.plexus.PlexusConstants;
@@ -49,9 +51,11 @@
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.Iterator;
 import java.util.List;
 
@@ -62,7 +66,8 @@
  */
 public class DefaultMavenExecutionRequestPopulator
     extends AbstractLogEnabled
-    implements MavenExecutionRequestPopulator, Contextualizable
+    implements MavenExecutionRequestPopulator,
+    Contextualizable
 {
     private ArtifactRepositoryFactory artifactRepositoryFactory;
 
@@ -75,33 +80,41 @@
     private MavenSettingsBuilder settingsBuilder;
 
     public MavenExecutionRequest populateDefaults( MavenExecutionRequest request,
-                                                   MavenEmbedder embedder )
+                                                   Configuration configuration )
         throws MavenEmbedderException
     {
         // Actual POM File
 
         if ( request.getPomFile() == null && request.getBaseDirectory() != null )
         {
-            File pom = new File( request.getBaseDirectory(), Maven.RELEASE_POMv4 );
+            File pom = new File(
+                request.getBaseDirectory(),
+                Maven.RELEASE_POMv4 );
 
             if ( !pom.exists() )
             {
-                pom = new File( request.getBaseDirectory(), Maven.POMv4 );
+                pom = new File(
+                    request.getBaseDirectory(),
+                    Maven.POMv4 );
             }
 
             request.setPomFile( pom.getAbsolutePath() );
         }
 
+        request.setGlobalSettingsFile( configuration.getGlobalSettingsFile() );
+
+        request.setUserSettingsFile( configuration.getUserSettingsFile() );
+
         if ( request.getSettings() == null )
         {
             try
             {
                 request.setSettings(
                     settingsBuilder.buildSettings(
-                        embedder.getConfiguration().getUserSettingsFile(),
-                        embedder.getConfiguration().getGlobalSettingsFile() ) );
+                        configuration.getUserSettingsFile(),
+                        configuration.getGlobalSettingsFile() ) );
             }
-            catch( Exception e )
+            catch ( Exception e )
             {
                 request.setSettings( new Settings() );
             }
@@ -109,7 +122,7 @@
 
         if ( request.getLocalRepository() == null )
         {
-            request.setLocalRepository( embedder.createLocalRepository( request.getSettings() ) );
+            request.setLocalRepository( createLocalRepository( request.getSettings(), configuration ) );
         }
 
         // Repository update policies
@@ -161,7 +174,9 @@
         }
         catch ( Exception e )
         {
-            throw new MavenEmbedderException( "Unable to configure Maven for execution", e );
+            throw new MavenEmbedderException(
+                "Unable to configure Maven for execution",
+                e );
         }
 
         // BaseDirectory in MavenExecutionRequest
@@ -186,7 +201,9 @@
 
         ProfileManager globalProfileManager = new DefaultProfileManager( container );
 
-        loadSettingsProfiles( globalProfileManager, request.getSettings() );
+        loadSettingsProfiles(
+            globalProfileManager,
+            request.getSettings() );
 
         globalProfileManager.explicitlyActivate( request.getActiveProfiles() );
 
@@ -213,27 +230,41 @@
                     throw new SettingsConfigurationException( "Proxy in settings.xml has no host" );
                 }
 
-                wagonManager.addProxy( proxy.getProtocol(), proxy.getHost(), proxy.getPort(), proxy.getUsername(),
-                                       proxy.getPassword(), proxy.getNonProxyHosts() );
+                wagonManager.addProxy(
+                    proxy.getProtocol(),
+                    proxy.getHost(),
+                    proxy.getPort(),
+                    proxy.getUsername(),
+                    proxy.getPassword(),
+                    proxy.getNonProxyHosts() );
             }
 
             for ( Iterator i = settings.getServers().iterator(); i.hasNext(); )
             {
                 Server server = (Server) i.next();
 
-                wagonManager.addAuthenticationInfo( server.getId(), server.getUsername(), server.getPassword(),
-                                                    server.getPrivateKey(), server.getPassphrase() );
-
-                wagonManager.addPermissionInfo( server.getId(), server.getFilePermissions(), server.getDirectoryPermissions() );
+                wagonManager.addAuthenticationInfo(
+                    server.getId(),
+                    server.getUsername(),
+                    server.getPassword(),
+                    server.getPrivateKey(),
+                    server.getPassphrase() );
+
+                wagonManager.addPermissionInfo(
+                    server.getId(),
+                    server.getFilePermissions(),
+                    server.getDirectoryPermissions() );
 
                 if ( server.getConfiguration() != null )
                 {
-                    wagonManager.addConfiguration( server.getId(), (Xpp3Dom) server.getConfiguration() );
+                    wagonManager.addConfiguration(
+                        server.getId(),
+                        (Xpp3Dom) server.getConfiguration() );
                 }
             }
 
             RepositoryPermissions defaultPermissions = new RepositoryPermissions();
-            
+
             defaultPermissions.setDirectoryMode( "775" );
 
             defaultPermissions.setFileMode( "664" );
@@ -244,7 +275,10 @@
             {
                 Mirror mirror = (Mirror) i.next();
 
-                wagonManager.addMirror( mirror.getId(), mirror.getMirrorOf(), mirror.getUrl() );
+                wagonManager.addMirror(
+                    mirror.getId(),
+                    mirror.getMirrorOf(),
+                    mirror.getUrl() );
             }
         }
         finally
@@ -263,7 +297,8 @@
         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
     }
 
-    public void loadSettingsProfiles( ProfileManager profileManager, Settings settings )
+    public void loadSettingsProfiles( ProfileManager profileManager,
+                                      Settings settings )
     {
         List settingsProfiles = settings.getProfiles();
 
@@ -284,4 +319,111 @@
         }
     }
 
+    // ----------------------------------------------------------------------
+    // Local Repository
+    // ----------------------------------------------------------------------
+
+    public ArtifactRepository createLocalRepository( Settings settings, Configuration configuration )
+        throws MavenEmbedderException
+    {
+        String localRepositoryPath = null;
+
+        if ( configuration.getLocalRepository() != null )
+        {
+            localRepositoryPath = configuration.getLocalRepository().getAbsolutePath();
+        }
+
+        if ( StringUtils.isEmpty( localRepositoryPath ) )
+        {
+            localRepositoryPath = settings.getLocalRepository();
+        }
+
+        if ( StringUtils.isEmpty( localRepositoryPath ) )
+        {
+            localRepositoryPath = MavenEmbedder.defaultUserLocalRepository.getAbsolutePath();
+        }
+
+        return createLocalRepository(
+            localRepositoryPath,
+            MavenEmbedder.DEFAULT_LOCAL_REPO_ID );
+    }
+
+    public ArtifactRepository createLocalRepository( String url,
+                                                     String repositoryId )
+        throws MavenEmbedderException
+    {
+        try
+        {
+            return createRepository(
+                canonicalFileUrl( url ),
+                repositoryId );
+        }
+        catch ( IOException e )
+        {
+            throw new MavenEmbedderException(
+                "Unable to resolve canonical path for local repository " + url,
+                e );
+        }
+    }
+
+    private String canonicalFileUrl( String url )
+        throws IOException
+    {
+        if ( !url.startsWith( "file:" ) )
+        {
+            url = "file://" + url;
+        }
+        else if ( url.startsWith( "file:" ) && !url.startsWith( "file://" ) )
+        {
+            url = "file://" + url.substring( "file:".length() );
+        }
+
+        // So now we have an url of the form file://<path>
+
+        // We want to eliminate any relative path nonsense and lock down the path so we
+        // need to fully resolve it before any sub-modules use the path. This can happen
+        // when you are using a custom settings.xml that contains a relative path entry
+        // for the local repository setting.
+
+        File localRepository = new File( url.substring( "file://".length() ) );
+
+        if ( !localRepository.isAbsolute() )
+        {
+            url = "file://" + localRepository.getCanonicalPath();
+        }
+
+        return url;
+    }
+
+    public ArtifactRepository createRepository( String url,
+                                                String repositoryId )
+    {
+        // snapshots vs releases
+        // offline = to turning the update policy off
+
+        //TODO: we'll need to allow finer grained creation of repositories but this will do for now
+
+        String updatePolicyFlag = ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS;
+
+        String checksumPolicyFlag = ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN;
+
+        ArtifactRepositoryPolicy snapshotsPolicy =
+            new ArtifactRepositoryPolicy(
+                true,
+                updatePolicyFlag,
+                checksumPolicyFlag );
+
+        ArtifactRepositoryPolicy releasesPolicy =
+            new ArtifactRepositoryPolicy(
+                true,
+                updatePolicyFlag,
+                checksumPolicyFlag );
+
+        return artifactRepositoryFactory.createArtifactRepository(
+            repositoryId,
+            url,
+            defaultArtifactRepositoryLayout,
+            snapshotsPolicy,
+            releasesPolicy );
+    }
 }

Modified: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/MavenExecutionRequestPopulator.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/MavenExecutionRequestPopulator.java?rev=573494&r1=573493&r2=573494&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/MavenExecutionRequestPopulator.java (original)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/MavenExecutionRequestPopulator.java Fri Sep  7 00:54:11 2007
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import org.apache.maven.embedder.MavenEmbedder;
+import org.apache.maven.embedder.Configuration;
 import org.apache.maven.embedder.MavenEmbedderException;
 import org.apache.maven.execution.MavenExecutionRequest;
 
@@ -27,6 +27,6 @@
 {
     String ROLE = MavenExecutionRequestPopulator.class.getName();
 
-    MavenExecutionRequest populateDefaults( MavenExecutionRequest request, MavenEmbedder embedder )
+    MavenExecutionRequest populateDefaults( MavenExecutionRequest request, Configuration configuration )
         throws MavenEmbedderException;
 }

Modified: maven/components/trunk/maven-embedder/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/resources/META-INF/plexus/components.xml?rev=573494&r1=573493&r2=573494&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/components/trunk/maven-embedder/src/main/resources/META-INF/plexus/components.xml Fri Sep  7 00:54:11 2007
@@ -28,10 +28,14 @@
           <role-hint>default</role-hint>
         </requirement>
         <requirement>
+          <role>org.apache.maven.settings.MavenSettingsBuilder</role>
+        </requirement>
+        <requirement>
           <role>org.apache.maven.artifact.repository.ArtifactRepositoryFactory</role>
         </requirement>
         <requirement>
-          <role>org.apache.maven.settings.MavenSettingsBuilder</role>
+          <role>org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout</role>
+          <role-hint>default</role-hint>
         </requirement>
       </requirements>
     </component>

Modified: maven/components/trunk/maven-embedder/src/test/java/org/apache/maven/embedder/MavenEmbedderExampleTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/test/java/org/apache/maven/embedder/MavenEmbedderExampleTest.java?rev=573494&r1=573493&r2=573494&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/test/java/org/apache/maven/embedder/MavenEmbedderExampleTest.java (original)
+++ maven/components/trunk/maven-embedder/src/test/java/org/apache/maven/embedder/MavenEmbedderExampleTest.java Fri Sep  7 00:54:11 2007
@@ -59,7 +59,7 @@
 
             if ( result.hasExceptions() )
             {
-                // Notify user that exceptions have occured.
+                fail( ((Exception)result.getExceptions().get( 0 )).getMessage() );
             }
 
             // ----------------------------------------------------------------------------