You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/04/02 21:43:55 UTC

svn commit: r761401 - in /maven/components/trunk: maven-core/src/main/java/org/apache/maven/execution/ maven-embedder/src/main/java/org/apache/maven/cli/ maven-embedder/src/main/java/org/apache/maven/embedder/ maven-embedder/src/main/java/org/apache/ma...

Author: bentmann
Date: Thu Apr  2 19:43:55 2009
New Revision: 761401

URL: http://svn.apache.org/viewvc?rev=761401&view=rev
Log:
[MNG-3714] Allow specification of the toolchains.xml location on the command line

Added:
    maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java
      - copied, changed from r761356, maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java
    maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java   (with props)
    maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/ToolchainsBuilder.java   (with props)
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-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
    maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIRequestUtils.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-toolchain/pom.xml
    maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java
    maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/java/DefaultJavaToolchainFactory.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=761401&r1=761400&r2=761401&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 Thu Apr  2 19:43:55 2009
@@ -71,6 +71,8 @@
 
     private File globalSettingsFile;
 
+    private File userToolchainsFile;
+
     // ----------------------------------------------------------------------------
     // Request
     // ----------------------------------------------------------------------------
@@ -138,6 +140,7 @@
         copy.setProjectPresent( original.isProjectPresent() );
         copy.setUserSettingsFile( original.getUserSettingsFile() );
         copy.setGlobalSettingsFile( original.getGlobalSettingsFile() );
+        copy.setUserToolchainsFile( original.getUserToolchainsFile() );
         copy.setBaseDirectory( new File( original.getBaseDirectory() ) );
         copy.setGoals( original.getGoals() );
         copy.setUseReactor( original.useReactor() );
@@ -652,7 +655,7 @@
         return this;
     }
 
-    // Settin10gs files
+    // Settings files
 
     public File getUserSettingsFile()
     {
@@ -678,6 +681,18 @@
         return this;
     }
 
+    public File getUserToolchainsFile()
+    {
+        return userToolchainsFile;
+    }
+
+    public MavenExecutionRequest setUserToolchainsFile( File userToolchainsFile )
+    {
+        this.userToolchainsFile = userToolchainsFile;
+
+        return this;
+    }
+
     public MavenExecutionRequest addRemoteRepository( ArtifactRepository repository )
     {
         if ( remoteRepositories == null )

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=761401&r1=761400&r2=761401&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 Thu Apr  2 19:43:55 2009
@@ -230,5 +230,8 @@
     MavenExecutionRequest setErrorReporter( CoreErrorReporter reporter );
     CoreErrorReporter getErrorReporter();
 
+    File getUserToolchainsFile();
+    MavenExecutionRequest setUserToolchainsFile( File userToolchainsFile );
+
     ProjectBuilderConfiguration getProjectBuildingConfiguration();
 }

Modified: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java?rev=761401&r1=761400&r2=761401&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java (original)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java Thu Apr  2 19:43:55 2009
@@ -76,6 +76,8 @@
 
     public static final String ALTERNATE_GLOBAL_SETTINGS = "gs";
 
+    public static final char ALTERNATE_USER_TOOLCHAINS = 't';
+
     public static final String FAIL_FAST = "ff";
 
     public static final String FAIL_AT_END = "fae";
@@ -111,6 +113,7 @@
         options.addOption( OptionBuilder.withLongOpt( "lax-checksums" ).withDescription( "Warn if checksums don't match" ).create( CHECKSUM_WARNING_POLICY ) );
         options.addOption( OptionBuilder.withLongOpt( "settings" ).withDescription( "Alternate path for the user settings file" ).hasArg().create( ALTERNATE_USER_SETTINGS ) );
         options.addOption( OptionBuilder.withLongOpt( "global-settings" ).withDescription( "Alternate path for the global settings file" ).hasArg().create( ALTERNATE_GLOBAL_SETTINGS ) );
+        options.addOption( OptionBuilder.withLongOpt( "toolchains" ).withDescription( "Alternate path for the user toolchains file" ).hasArg().create( ALTERNATE_USER_TOOLCHAINS ) );
         options.addOption( OptionBuilder.withLongOpt( "fail-fast" ).withDescription( "Stop at first failure in reactorized builds" ).create( FAIL_FAST ) );
         options.addOption( OptionBuilder.withLongOpt( "fail-at-end" ).withDescription( "Only fail the build afterwards; allow all non-impacted builds to continue" ).create( FAIL_AT_END ) );
         options.addOption( OptionBuilder.withLongOpt( "fail-never" ).withDescription( "NEVER fail the build, regardless of project result" ).create( FAIL_NEVER ) );

Modified: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIRequestUtils.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIRequestUtils.java?rev=761401&r1=761400&r2=761401&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIRequestUtils.java (original)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIRequestUtils.java Thu Apr  2 19:43:55 2009
@@ -30,6 +30,7 @@
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.maven.MavenTransferListener;
+import org.apache.maven.embedder.MavenEmbedder;
 import org.apache.maven.execution.DefaultMavenExecutionRequest;
 import org.apache.maven.execution.MavenExecutionRequest;
 import org.codehaus.plexus.util.cli.CommandLineUtils;
@@ -222,6 +223,16 @@
         Properties userProperties = new Properties();
         populateProperties( commandLine, executionProperties, userProperties );
 
+        File userToolchainsFile;
+        if ( commandLine.hasOption( CLIManager.ALTERNATE_USER_TOOLCHAINS ) )
+        {
+            userToolchainsFile = new File( commandLine.getOptionValue( CLIManager.ALTERNATE_USER_TOOLCHAINS ) );
+        }
+        else
+        {
+            userToolchainsFile = MavenEmbedder.DEFAULT_USER_TOOLCHAINS_FILE;
+        }
+
         MavenExecutionRequest request = new DefaultMavenExecutionRequest()
             .setBaseDirectory( baseDirectory )
             .setGoals( goals )
@@ -240,7 +251,9 @@
             .setTransferListener( transferListener ) // default: batch mode which goes along with interactive
             .setUpdateSnapshots( updateSnapshots ) // default: false
             .setNoSnapshotUpdates( noSnapshotUpdates ) // default: false
-            .setGlobalChecksumPolicy( globalChecksumPolicy ); // default: warn
+            .setGlobalChecksumPolicy( globalChecksumPolicy ) // default: warn
+            .setUserToolchainsFile( userToolchainsFile );
+        
 
         if ( alternatePomFile != null )
         {

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=761401&r1=761400&r2=761401&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 Thu Apr  2 19:43:55 2009
@@ -23,10 +23,8 @@
 import java.io.IOException;
 import java.io.Reader;
 import java.io.Writer;
-import java.net.URL;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.List;
 
 import org.apache.maven.Maven;
@@ -80,11 +78,7 @@
 import org.codehaus.plexus.PlexusContainerException;
 import org.codehaus.plexus.classworlds.ClassWorld;
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
-import org.codehaus.plexus.classworlds.realm.DuplicateRealmException;
-import org.codehaus.plexus.classworlds.realm.NoSuchRealmException;
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.component.repository.exception.ComponentRepositoryException;
-import org.codehaus.plexus.configuration.PlexusConfigurationException;
 import org.codehaus.plexus.logging.LoggerManager;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
@@ -111,6 +105,8 @@
     public static final File DEFAULT_GLOBAL_SETTINGS_FILE =
         new File( System.getProperty( "maven.home", System.getProperty( "user.dir", "" ) ), "conf/settings.xml" );
 
+    public static final File DEFAULT_USER_TOOLCHAINS_FILE = new File( userMavenConfigurationHome, "toolchains.xml" );
+
     // ----------------------------------------------------------------------------
     //
     // ----------------------------------------------------------------------------

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=761401&r1=761400&r2=761401&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 Thu Apr  2 19:43:55 2009
@@ -17,7 +17,6 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -50,6 +49,7 @@
 import org.apache.maven.settings.Server;
 import org.apache.maven.settings.Settings;
 import org.apache.maven.settings.SettingsUtils;
+import org.apache.maven.toolchain.ToolchainsBuilder;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
@@ -80,6 +80,9 @@
     @Requirement
     private RepositorySystem repositorySystem;
 
+    @Requirement
+    private ToolchainsBuilder toolchainsBuilder;
+
     // 2009-03-05 Oleg: this component is defined sub-classed in this package
     @Requirement(hint = "maven")
     private SecDispatcher securityDispatcher;
@@ -99,6 +102,8 @@
 
         localRepository( request, configuration );
 
+        toolchains( request, configuration );
+
         artifactTransferMechanism( request, configuration );
 
         realmManager( request, configuration );
@@ -526,4 +531,10 @@
         request.setProfileManager( globalProfileManager );
         request.setProfileActivationContext( activationContext );
     }
+
+    private void toolchains( MavenExecutionRequest request, Configuration configuration )
+    {
+        toolchainsBuilder.setUserToolchainsFile( request.getUserToolchainsFile() );
+    }
+
 }

Modified: maven/components/trunk/maven-toolchain/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-toolchain/pom.xml?rev=761401&r1=761400&r2=761401&view=diff
==============================================================================
--- maven/components/trunk/maven-toolchain/pom.xml (original)
+++ maven/components/trunk/maven-toolchain/pom.xml Thu Apr  2 19:43:55 2009
@@ -35,6 +35,18 @@
   <build>
     <plugins>
       <plugin>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-component-metadata</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>generate-metadata</goal>
+              <goal>generate-test-metadata</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
         <groupId>org.codehaus.modello</groupId>
         <artifactId>modello-maven-plugin</artifactId>
         <executions>

Modified: maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java?rev=761401&r1=761400&r2=761401&view=diff
==============================================================================
--- maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java (original)
+++ maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java Thu Apr  2 19:43:55 2009
@@ -1,3 +1,5 @@
+package org.apache.maven.toolchain;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -17,214 +19,84 @@
  * under the License.
  */
 
-package org.apache.maven.toolchain;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.toolchain.model.PersistedToolchains;
 import org.apache.maven.toolchain.model.ToolchainModel;
-import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
-import org.codehaus.plexus.PlexusConstants;
-import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+import org.codehaus.plexus.logging.Logger;
 
 /**
- *
  * @author mkleint
  */
-@Component(role=ToolchainManager.class)
-public class DefaultToolchainManager extends AbstractLogEnabled
-    implements ToolchainManager,
-               ToolchainManagerPrivate
+@Component( role = ToolchainManager.class )
+public class DefaultToolchainManager
+    implements ToolchainManager
+
 {
-	@Requirement
-    private PlexusContainer container;
 
-    public DefaultToolchainManager( )
-    {
-    }
+    @Requirement
+    Logger logger;
 
-    public ToolchainPrivate[] getToolchainsForType( String type )
-        throws MisconfiguredToolchainException
+    @Requirement( role = ToolchainFactory.class )
+    Map<String, ToolchainFactory> factories;
+
+    public Toolchain getToolchainFromBuildContext( String type, MavenSession session )
     {
-        try
+        Map context = retrieveContext( session );
+
+        ToolchainModel model = (ToolchainModel) context.get( getStorageKey( type ) );
+
+        if ( model != null )
         {
-            PersistedToolchains pers = readToolchainSettings ();
-            Map<String, ToolchainFactory> factories = container.lookupMap( ToolchainFactory.class );
-            List toRet = new ArrayList(  );
-            if ( pers != null )
+            try
             {
-                List lst = pers.getToolchains();
-                if ( lst != null )
+                ToolchainFactory fact = factories.get( type );
+                if ( fact != null )
                 {
-                    Iterator it = lst.iterator();
-                    while ( it.hasNext() )
-                    {
-                        ToolchainModel toolchainModel = (ToolchainModel) it.next();
-                        ToolchainFactory fact = factories.get( toolchainModel.getType() );
-                        if ( fact != null )
-                        {
-                            toRet.add( fact.createToolchain( toolchainModel ) );
-                        }
-                        else
-                        {
-                            getLogger().error("Missing toolchain factory for type:" + toolchainModel.getType() + ". Possibly caused by misconfigured project.");
-                        }
-                    }
+                    return fact.createToolchain( model );
                 }
-            }
-            for ( ToolchainFactory toolchainFactory : factories.values() )
-            {
-                ToolchainPrivate tool = toolchainFactory.createDefaultToolchain();
-                if ( tool != null )
+                else
                 {
-                    toRet.add( tool );
+                    logger.error( "Missing toolchain factory for type: " + type
+                        + ". Possibly caused by misconfigured project." );
                 }
             }
-            ToolchainPrivate[] tc = new ToolchainPrivate[ toRet.size() ];
-            return (ToolchainPrivate[]) toRet.toArray(tc);
-        }
-        catch ( ComponentLookupException ex )
-        {
-            getLogger().fatalError("Error in component lookup", ex);
-        }
-        return new ToolchainPrivate[0];
-    }
-
-    public Toolchain getToolchainFromBuildContext( String type,
-                                                   MavenSession session )
-    {
-        Map context = retrieveContext(session);
-        if ( "javac".equals( type )) 
-        {
-            //HACK to make compiler plugin happy
-            type = "jdk";
-        }
-        Object obj = context.get( getStorageKey( type ) );
-        ToolchainModel model = (ToolchainModel)obj;
-        
-        if ( model != null ) 
-        {
-            try
-            {
-                ToolchainFactory fact = container.lookup(ToolchainFactory.class, type);
-                return fact.createToolchain( model );
-            }
-            catch ( ComponentLookupException ex )
-            {
-                getLogger().fatalError("Error in component lookup", ex);
-            }
             catch ( MisconfiguredToolchainException ex )
             {
-                getLogger().error("Misconfigured toolchain.", ex);
+                logger.error( "Misconfigured toolchain.", ex );
             }
         }
-        return null;
-    }
 
-    private MavenProject getCurrentProject(MavenSession session) {
-        //use reflection since MavenSession.getCurrentProject() is not part of 2.0.8
-        try 
-        {
-            Method meth = session.getClass().getMethod("getCurrentProject", new Class[0]);
-            return (MavenProject) meth.invoke (session );
-        } catch (Exception ex) 
-        {
-            //just ignore, we're running in pre- 2.0.9
-        }
         return null;
     }
-    
-    private Map retrieveContext( MavenSession session ) 
+
+    Map retrieveContext( MavenSession session )
     {
-        if (session == null) 
-        {
-            return new HashMap();
-        }
-        PluginDescriptor desc = new PluginDescriptor();
-        desc.setGroupId( PluginDescriptor.getDefaultPluginGroupId() );
-        desc.setArtifactId( PluginDescriptor.getDefaultPluginArtifactId ("toolchains") );
-        MavenProject current = getCurrentProject(session);
-        if ( current != null ) 
+        Map context = null;
+
+        if ( session != null )
         {
-            return session.getPluginContext( desc, current );
-            
+            PluginDescriptor desc = new PluginDescriptor();
+            desc.setGroupId( PluginDescriptor.getDefaultPluginGroupId() );
+            desc.setArtifactId( PluginDescriptor.getDefaultPluginArtifactId( "toolchains" ) );
+
+            MavenProject current = session.getCurrentProject();
+            if ( current != null )
+            {
+                context = session.getPluginContext( desc, current );
+            }
         }
-        return new HashMap();
-    }
-    
 
-    public void storeToolchainToBuildContext( ToolchainPrivate toolchain,
-                                              MavenSession session )
-    {
-        Map context = retrieveContext( session );
-        context.put( getStorageKey( toolchain.getType() ), toolchain.getModel () );
+        return ( context != null ) ? context : new HashMap();
     }
-    
+
     public static final String getStorageKey( String type )
     {
-        return "toolchain-" + type; //NOI18N
+        return "toolchain-" + type; // NOI18N
     }
-    
 
-    private PersistedToolchains readToolchainSettings( )
-        throws MisconfiguredToolchainException
-    {
-        //TODO how to point to the local path?
-        File tch = new File( System.getProperty( "user.home" ),
-            ".m2/toolchains.xml" );
-        if ( tch.exists() )
-        {
-            MavenToolchainsXpp3Reader reader = new MavenToolchainsXpp3Reader();
-            InputStreamReader in = null;
-            try
-            {
-                in = new InputStreamReader( new BufferedInputStream( new FileInputStream( tch ) ) );
-                return reader.read( in );
-            }
-            catch ( Exception ex )
-            {
-                throw new MisconfiguredToolchainException( "Cannot read toolchains file at " + tch.getAbsolutePath(  ),
-                    ex );
-            }
-            finally
-            {
-                if (in != null) 
-                {
-                    try 
-                    {
-                        in.close();
-                    } 
-                    catch (IOException ex) 
-                    { }
-                }
-//                IOUtil.close( in );
-            }
-        }
-        else
-        {
-            //TODO log the fact that no toolchains file was found.
-        }
-        return null;
-    }
-}
\ No newline at end of file
+}

Copied: maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java (from r761356, maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java)
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java?p2=maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java&p1=maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java&r1=761356&r2=761401&rev=761401&view=diff
==============================================================================
--- maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java (original)
+++ maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java Thu Apr  2 19:43:55 2009
@@ -1,3 +1,5 @@
+package org.apache.maven.toolchain;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -17,214 +19,71 @@
  * under the License.
  */
 
-package org.apache.maven.toolchain;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import org.apache.maven.execution.MavenSession;
-import org.apache.maven.plugin.descriptor.PluginDescriptor;
-import org.apache.maven.project.MavenProject;
 import org.apache.maven.toolchain.model.PersistedToolchains;
 import org.apache.maven.toolchain.model.ToolchainModel;
-import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
-import org.codehaus.plexus.PlexusConstants;
-import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 
 /**
- *
  * @author mkleint
  */
-@Component(role=ToolchainManager.class)
-public class DefaultToolchainManager extends AbstractLogEnabled
-    implements ToolchainManager,
-               ToolchainManagerPrivate
+@Component( role = ToolchainManagerPrivate.class )
+public class DefaultToolchainManagerPrivate
+    extends DefaultToolchainManager
+    implements ToolchainManagerPrivate
 {
-	@Requirement
-    private PlexusContainer container;
 
-    public DefaultToolchainManager( )
-    {
-    }
+    @Requirement
+    private ToolchainsBuilder toolchainsBuilder;
 
     public ToolchainPrivate[] getToolchainsForType( String type )
         throws MisconfiguredToolchainException
     {
-        try
+        PersistedToolchains pers = toolchainsBuilder.build();
+
+        List<ToolchainPrivate> toRet = new ArrayList<ToolchainPrivate>();
+
+        if ( pers != null )
         {
-            PersistedToolchains pers = readToolchainSettings ();
-            Map<String, ToolchainFactory> factories = container.lookupMap( ToolchainFactory.class );
-            List toRet = new ArrayList(  );
-            if ( pers != null )
+            List<ToolchainModel> lst = pers.getToolchains();
+            if ( lst != null )
             {
-                List lst = pers.getToolchains();
-                if ( lst != null )
+                for ( ToolchainModel toolchainModel : lst )
                 {
-                    Iterator it = lst.iterator();
-                    while ( it.hasNext() )
+                    ToolchainFactory fact = factories.get( toolchainModel.getType() );
+                    if ( fact != null )
                     {
-                        ToolchainModel toolchainModel = (ToolchainModel) it.next();
-                        ToolchainFactory fact = factories.get( toolchainModel.getType() );
-                        if ( fact != null )
-                        {
-                            toRet.add( fact.createToolchain( toolchainModel ) );
-                        }
-                        else
-                        {
-                            getLogger().error("Missing toolchain factory for type:" + toolchainModel.getType() + ". Possibly caused by misconfigured project.");
-                        }
+                        toRet.add( fact.createToolchain( toolchainModel ) );
+                    }
+                    else
+                    {
+                        logger.error( "Missing toolchain factory for type: " + toolchainModel.getType()
+                            + ". Possibly caused by misconfigured project." );
                     }
                 }
             }
-            for ( ToolchainFactory toolchainFactory : factories.values() )
-            {
-                ToolchainPrivate tool = toolchainFactory.createDefaultToolchain();
-                if ( tool != null )
-                {
-                    toRet.add( tool );
-                }
-            }
-            ToolchainPrivate[] tc = new ToolchainPrivate[ toRet.size() ];
-            return (ToolchainPrivate[]) toRet.toArray(tc);
-        }
-        catch ( ComponentLookupException ex )
-        {
-            getLogger().fatalError("Error in component lookup", ex);
         }
-        return new ToolchainPrivate[0];
-    }
 
-    public Toolchain getToolchainFromBuildContext( String type,
-                                                   MavenSession session )
-    {
-        Map context = retrieveContext(session);
-        if ( "javac".equals( type )) 
-        {
-            //HACK to make compiler plugin happy
-            type = "jdk";
-        }
-        Object obj = context.get( getStorageKey( type ) );
-        ToolchainModel model = (ToolchainModel)obj;
-        
-        if ( model != null ) 
+        for ( ToolchainFactory toolchainFactory : factories.values() )
         {
-            try
+            ToolchainPrivate tool = toolchainFactory.createDefaultToolchain();
+            if ( tool != null )
             {
-                ToolchainFactory fact = container.lookup(ToolchainFactory.class, type);
-                return fact.createToolchain( model );
-            }
-            catch ( ComponentLookupException ex )
-            {
-                getLogger().fatalError("Error in component lookup", ex);
-            }
-            catch ( MisconfiguredToolchainException ex )
-            {
-                getLogger().error("Misconfigured toolchain.", ex);
+                toRet.add( tool );
             }
         }
-        return null;
-    }
 
-    private MavenProject getCurrentProject(MavenSession session) {
-        //use reflection since MavenSession.getCurrentProject() is not part of 2.0.8
-        try 
-        {
-            Method meth = session.getClass().getMethod("getCurrentProject", new Class[0]);
-            return (MavenProject) meth.invoke (session );
-        } catch (Exception ex) 
-        {
-            //just ignore, we're running in pre- 2.0.9
-        }
-        return null;
+        return toRet.toArray( new ToolchainPrivate[toRet.size()] );
     }
-    
-    private Map retrieveContext( MavenSession session ) 
-    {
-        if (session == null) 
-        {
-            return new HashMap();
-        }
-        PluginDescriptor desc = new PluginDescriptor();
-        desc.setGroupId( PluginDescriptor.getDefaultPluginGroupId() );
-        desc.setArtifactId( PluginDescriptor.getDefaultPluginArtifactId ("toolchains") );
-        MavenProject current = getCurrentProject(session);
-        if ( current != null ) 
-        {
-            return session.getPluginContext( desc, current );
-            
-        }
-        return new HashMap();
-    }
-    
 
-    public void storeToolchainToBuildContext( ToolchainPrivate toolchain,
-                                              MavenSession session )
+    public void storeToolchainToBuildContext( ToolchainPrivate toolchain, MavenSession session )
     {
         Map context = retrieveContext( session );
-        context.put( getStorageKey( toolchain.getType() ), toolchain.getModel () );
-    }
-    
-    public static final String getStorageKey( String type )
-    {
-        return "toolchain-" + type; //NOI18N
+        context.put( getStorageKey( toolchain.getType() ), toolchain.getModel() );
     }
-    
 
-    private PersistedToolchains readToolchainSettings( )
-        throws MisconfiguredToolchainException
-    {
-        //TODO how to point to the local path?
-        File tch = new File( System.getProperty( "user.home" ),
-            ".m2/toolchains.xml" );
-        if ( tch.exists() )
-        {
-            MavenToolchainsXpp3Reader reader = new MavenToolchainsXpp3Reader();
-            InputStreamReader in = null;
-            try
-            {
-                in = new InputStreamReader( new BufferedInputStream( new FileInputStream( tch ) ) );
-                return reader.read( in );
-            }
-            catch ( Exception ex )
-            {
-                throw new MisconfiguredToolchainException( "Cannot read toolchains file at " + tch.getAbsolutePath(  ),
-                    ex );
-            }
-            finally
-            {
-                if (in != null) 
-                {
-                    try 
-                    {
-                        in.close();
-                    } 
-                    catch (IOException ex) 
-                    { }
-                }
-//                IOUtil.close( in );
-            }
-        }
-        else
-        {
-            //TODO log the fact that no toolchains file was found.
-        }
-        return null;
-    }
-}
\ No newline at end of file
+}

Added: maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java?rev=761401&view=auto
==============================================================================
--- maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java (added)
+++ maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java Thu Apr  2 19:43:55 2009
@@ -0,0 +1,85 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.Reader;
+
+import org.apache.maven.toolchain.model.PersistedToolchains;
+import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+
+/**
+ * @author Benjamin Bentmann
+ */
+@Component( role = ToolchainsBuilder.class, hint = "default" )
+public class DefaultToolchainsBuilder
+    implements ToolchainsBuilder
+{
+
+    @Requirement
+    private Logger logger;
+
+    /**
+     * The path to the user's toolchains file or <code>null</code> if not configured.
+     */
+    private File userToolchainsFile;
+
+    public PersistedToolchains build()
+        throws MisconfiguredToolchainException
+    {
+        PersistedToolchains toolchains = null;
+
+        if ( userToolchainsFile != null && userToolchainsFile.isFile() )
+        {
+            Reader in = null;
+            try
+            {
+                in = ReaderFactory.newXmlReader( userToolchainsFile );
+                toolchains = new MavenToolchainsXpp3Reader().read( in );
+            }
+            catch ( Exception e )
+            {
+                throw new MisconfiguredToolchainException( "Cannot read toolchains file at "
+                    + userToolchainsFile.getAbsolutePath(), e );
+            }
+            finally
+            {
+                IOUtil.close( in );
+            }
+        }
+        else if ( userToolchainsFile != null )
+        {
+            logger.debug( "Toolchains configuration was not found at " + userToolchainsFile );
+        }
+
+        return toolchains;
+    }
+
+    public void setUserToolchainsFile( File userToolchainsFile )
+    {
+        this.userToolchainsFile = userToolchainsFile;
+    }
+
+}

Propchange: maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/ToolchainsBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/ToolchainsBuilder.java?rev=761401&view=auto
==============================================================================
--- maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/ToolchainsBuilder.java (added)
+++ maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/ToolchainsBuilder.java Thu Apr  2 19:43:55 2009
@@ -0,0 +1,52 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.toolchain.model.PersistedToolchains;
+
+/**
+ * Builds the toolchains model from a previously configured filesystem path to the toolchains file.
+ * <strong>Note:</strong> This is an internal component whose interface can change without prior notice.
+ * 
+ * @author Benjamin Bentmann
+ */
+public interface ToolchainsBuilder
+{
+
+    /**
+     * Builds the toolchains model from the configured toolchain files.
+     * 
+     * @return The toolchains model or <code>null</code> if no toolchain file was configured or the configured files do
+     *         not exist.
+     * @throws MisconfiguredToolchainException If the toolchain files exist but cannot be parsed.
+     */
+    PersistedToolchains build()
+        throws MisconfiguredToolchainException;
+
+    /**
+     * Sets the path to the file from which to read the available toolchains.
+     * 
+     * @param userToolchainsFile The path to the toolchains file, may be <code>null</code> to disable parsing.
+     */
+    void setUserToolchainsFile( File userToolchainsFile );
+
+}

Propchange: maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/ToolchainsBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/ToolchainsBuilder.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/java/DefaultJavaToolchainFactory.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/java/DefaultJavaToolchainFactory.java?rev=761401&r1=761400&r2=761401&view=diff
==============================================================================
--- maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/java/DefaultJavaToolchainFactory.java (original)
+++ maven/components/trunk/maven-toolchain/src/main/java/org/apache/maven/toolchain/java/DefaultJavaToolchainFactory.java Thu Apr  2 19:43:55 2009
@@ -35,7 +35,7 @@
  *
  * @author mkleint
  */
-@Component(role=ToolchainFactory.class)
+@Component( role = ToolchainFactory.class, hint = "jdk" )
 public class DefaultJavaToolchainFactory
     implements ToolchainFactory, LogEnabled
 {