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
{