Author: jvanzyl
Date: Thu Feb 23 07:11:48 2006
New Revision: 380140
URL: http://svn.apache.org/viewcvs?rev=380140&view=rev
Log:
embedder refactoring
Added:
maven/components/branches/maven-embedder-refactor/
- copied from r379578, maven/components/trunk/
maven/components/branches/maven-embedder-refactor/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
- copied, changed from r379579,
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
maven/components/branches/maven-embedder-refactor/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder2.java
- copied unchanged from r379670,
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder2.java
Modified:
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java
Modified:
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
URL:
http://svn.apache.org/viewcvs/maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/DefaultMaven.java?rev=380140&r1=379578&r2=380140&view=diff
==============================================================================
---
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
(original)
+++
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
Thu Feb 23 07:11:48 2006
@@ -28,7 +28,6 @@
import org.apache.maven.execution.RuntimeInformation;
import org.apache.maven.lifecycle.LifecycleExecutionException;
import org.apache.maven.lifecycle.LifecycleExecutor;
-import org.apache.maven.model.Profile;
import org.apache.maven.monitor.event.EventDispatcher;
import org.apache.maven.monitor.event.MavenEvents;
import org.apache.maven.profiles.ProfileManager;
@@ -42,7 +41,6 @@
import org.apache.maven.settings.Proxy;
import org.apache.maven.settings.Server;
import org.apache.maven.settings.Settings;
-import org.apache.maven.settings.SettingsUtils;
import org.apache.maven.usability.SystemWarnings;
import org.apache.maven.usability.diagnostics.ErrorDiagnostics;
import org.codehaus.plexus.PlexusConstants;
Modified:
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java
URL:
http://svn.apache.org/viewcvs/maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java?rev=380140&r1=379578&r2=380140&view=diff
==============================================================================
---
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java
(original)
+++
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java
Thu Feb 23 07:11:48 2006
@@ -24,7 +24,7 @@
/**
* @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
- * @version $Id:$
+ * @version $Id$
* @todo this should probably be a component with some dynamic control of
filtering
*/
public class MavenArtifactFilterManager
Modified:
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java
URL:
http://svn.apache.org/viewcvs/maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java?rev=380140&r1=379578&r2=380140&view=diff
==============================================================================
---
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java
(original)
+++
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java
Thu Feb 23 07:11:48 2006
@@ -44,9 +44,9 @@
import org.apache.maven.settings.MavenSettingsBuilder;
import org.apache.maven.settings.RuntimeInfo;
import org.apache.maven.settings.Settings;
+import org.apache.maven.wagon.events.TransferListener;
import org.codehaus.classworlds.ClassWorld;
import org.codehaus.plexus.PlexusContainerException;
-import
org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
import
org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.embed.Embedder;
import org.codehaus.plexus.logging.Logger;
@@ -56,11 +56,13 @@
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Properties;
import java.util.StringTokenizer;
/**
- * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
+ * @author jason van zyl
* @version $Id$
* @noinspection UseOfSystemOutOrSystemErr,ACCESS_STATIC_VIA_INSTANCE
*/
@@ -119,7 +121,7 @@
cliManager.displayHelp();
return 0;
}
-
+
if ( commandLine.hasOption( CLIManager.VERSION ) )
{
showVersion();
@@ -131,8 +133,6 @@
showVersion();
}
- EventDispatcher eventDispatcher = new DefaultEventDispatcher();
-
//
----------------------------------------------------------------------
// Now that we have everything that we need we will fire up plexus and
// bring the maven component to life for use.
@@ -158,42 +158,113 @@
Properties executionProperties = getExecutionProperties( commandLine );
- Settings settings;
+ //
----------------------------------------------------------------------
+ //
+ //
----------------------------------------------------------------------
- try
+ String userSettingsPath = null;
+
+ if ( commandLine.hasOption( CLIManager.ALTERNATE_USER_SETTINGS ) )
{
- settings = buildSettings( commandLine );
+ userSettingsPath = commandLine.getOptionValue(
CLIManager.ALTERNATE_USER_SETTINGS );
}
- catch ( SettingsConfigurationException e )
- {
- showError( "Error reading settings.xml: " + e.getMessage(), e,
showErrors );
- return 1;
- }
- catch ( ComponentLookupException e )
+ boolean interactive = true;
+
+ if ( commandLine.hasOption( CLIManager.BATCH_MODE ) )
{
- showFatalError( "Unable to read settings.xml", e, showErrors );
+ interactive = false;
+ }
- return 1;
+ boolean usePluginRegistry = true;
+
+ if ( commandLine.hasOption( CLIManager.SUPPRESS_PLUGIN_REGISTRY ) )
+ {
+ usePluginRegistry = false;
}
- Maven maven = null;
+ Boolean pluginUpdateOverride = Boolean.FALSE;
- MavenExecutionRequest request = null;
+ if ( commandLine.hasOption( CLIManager.FORCE_PLUGIN_UPDATES ) ||
+ commandLine.hasOption( CLIManager.FORCE_PLUGIN_UPDATES2 ) )
+ {
+ pluginUpdateOverride = Boolean.TRUE;
+ }
+ else if ( commandLine.hasOption( CLIManager.SUPPRESS_PLUGIN_UPDATES ) )
+ {
+ pluginUpdateOverride = Boolean.FALSE;
+ }
- LoggerManager loggerManager = null;
+ //
----------------------------------------------------------------------
+ //
+ //
----------------------------------------------------------------------
try
{
- // logger must be created first
- loggerManager = (LoggerManager) embedder.lookup(
LoggerManager.ROLE );
+ List goals = commandLine.getArgList();
- if ( debug )
+ boolean recursive = true;
+
+ String failureType = null;
+
+ if ( commandLine.hasOption( CLIManager.NON_RECURSIVE ) )
{
- loggerManager.setThreshold( Logger.LEVEL_DEBUG );
+ recursive = false;
}
- ProfileManager profileManager = new DefaultProfileManager(
embedder.getContainer() );
+ if ( commandLine.hasOption( CLIManager.FAIL_FAST ) )
+ {
+ failureType = ReactorManager.FAIL_FAST;
+ }
+ else if ( commandLine.hasOption( CLIManager.FAIL_AT_END ) )
+ {
+ failureType = ReactorManager.FAIL_AT_END;
+ }
+ else if ( commandLine.hasOption( CLIManager.FAIL_NEVER ) )
+ {
+ failureType = ReactorManager.FAIL_NEVER;
+ }
+
+ boolean offline = false;
+
+ if ( commandLine.hasOption( CLIManager.OFFLINE ) )
+ {
+ offline = true;
+ }
+
+ boolean updateSnapshots = false;
+
+ if ( commandLine.hasOption( CLIManager.UPDATE_SNAPSHOTS ) )
+ {
+ updateSnapshots = true;
+ }
+
+ String globalChecksumPolicy = null;
+
+ if ( commandLine.hasOption( CLIManager.CHECKSUM_FAILURE_POLICY ) )
+ {
+ // todo; log
+ System.out.println( "+ Enabling strict checksum verification
on all artifact downloads." );
+
+ globalChecksumPolicy =
ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL;
+ }
+ else if ( commandLine.hasOption(
CLIManager.CHECKSUM_WARNING_POLICY ) )
+ {
+ // todo: log
+ System.out.println( "+ Disabling strict checksum verification
on all artifact downloads." );
+
+ globalChecksumPolicy =
ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN;
+ }
+
+ File baseDirectory = new File( System.getProperty( "user.dir" ) );
+
+ //
----------------------------------------------------------------------
+ // Profile Activation
+ //
----------------------------------------------------------------------
+
+ List activeProfiles = new ArrayList();
+
+ List inactiveProfiles = new ArrayList();
if ( commandLine.hasOption( CLIManager.ACTIVATE_PROFILES ) )
{
@@ -207,143 +278,120 @@
if ( profileAction.startsWith( "-" ) )
{
- profileManager.explicitlyDeactivate(
profileAction.substring( 1 ) );
+ activeProfiles.add( profileAction.substring( 1 ) );
}
else if ( profileAction.startsWith( "+" ) )
{
- profileManager.explicitlyActivate(
profileAction.substring( 1 ) );
+ inactiveProfiles.add( profileAction.substring( 1 ) );
}
else
{
// TODO: deprecate this eventually!
- profileManager.explicitlyActivate( profileAction );
+ activeProfiles.add( profileAction );
}
}
}
- request = createRequest( commandLine, settings, eventDispatcher,
loggerManager, profileManager,
- executionProperties, showErrors );
+ TransferListener transferListener;
- setProjectFileOptions( commandLine, request );
+ if ( interactive )
+ {
+ transferListener = new ConsoleDownloadMonitor();
+ }
+ else
+ {
+ transferListener = new BatchModeDownloadMonitor();
+ }
- maven = createMavenInstance( settings.isInteractiveMode() );
- }
- catch ( ComponentLookupException e )
- {
- showFatalError( "Unable to configure the Maven application", e,
showErrors );
+ boolean reactorActive = false;
- return 1;
- }
- finally
- {
- if ( loggerManager != null )
+ if ( commandLine.hasOption( CLIManager.REACTOR ) )
{
- try
- {
- embedder.release( loggerManager );
- }
- catch ( ComponentLifecycleException e )
- {
- showFatalError( "Error releasing logging manager", e,
showErrors );
- }
+ reactorActive = true;
}
- }
- try
- {
- maven.execute( request );
- }
- catch ( MavenExecutionException e )
- {
- return 1;
- }
+ String alternatePomFile = null;
- return 0;
- }
+ if ( commandLine.hasOption( CLIManager.ALTERNATE_POM_FILE ) )
+ {
+ alternatePomFile = commandLine.getOptionValue(
CLIManager.ALTERNATE_POM_FILE );
+ }
- private static Settings buildSettings( CommandLine commandLine )
- throws ComponentLookupException, SettingsConfigurationException
- {
- String userSettingsPath = null;
+ //
----------------------------------------------------------------------
+ // From here we are CLI free
+ //
----------------------------------------------------------------------
+
+ // We have a general problem with plexus components that are
singletons in that they use
+ // the same logger for their lifespan. This is not good in that
many requests may be fired
+ // off and the singleton plexus component will continue to funnel
their output to the same
+ // logger. We need to be able to swap the logger.
- if ( commandLine.hasOption( CLIManager.ALTERNATE_USER_SETTINGS ) )
- {
- userSettingsPath = commandLine.getOptionValue(
CLIManager.ALTERNATE_USER_SETTINGS );
- }
+ LoggerManager loggerManager = (LoggerManager) embedder.lookup(
LoggerManager.ROLE );
- Settings settings = null;
+ if ( debug )
+ {
+ loggerManager.setThreshold( Logger.LEVEL_DEBUG );
+ }
- MavenSettingsBuilder settingsBuilder = (MavenSettingsBuilder)
embedder.lookup( MavenSettingsBuilder.ROLE );
+ Settings settings = buildSettings( userSettingsPath, interactive,
usePluginRegistry, pluginUpdateOverride );
- try
- {
- if ( userSettingsPath != null )
- {
- File userSettingsFile = new File( userSettingsPath );
+ ProfileManager profileManager = new DefaultProfileManager(
embedder.getContainer() );
- if ( userSettingsFile.exists() &&
!userSettingsFile.isDirectory() )
- {
- settings = settingsBuilder.buildSettings( userSettingsFile
);
- }
- else
- {
- System.out.println( "WARNING: Alternate user settings
file: " + userSettingsPath +
- " is invalid. Using default path." );
- }
- }
+ profileManager.explicitlyActivate( activeProfiles );
- if ( settings == null )
- {
- settings = settingsBuilder.buildSettings();
- }
- }
- catch ( IOException e )
- {
- throw new SettingsConfigurationException( "Error reading settings
file", e );
- }
- catch ( XmlPullParserException e )
- {
- throw new SettingsConfigurationException( e.getMessage(),
e.getDetail(), e.getLineNumber(),
- e.getColumnNumber() );
- }
+ profileManager.explicitlyDeactivate( inactiveProfiles );
- // why aren't these part of the runtime info? jvz.
+ EventDispatcher eventDispatcher = new DefaultEventDispatcher();
- if ( commandLine.hasOption( CLIManager.BATCH_MODE ) )
- {
- settings.setInteractiveMode( false );
- }
+ MavenExecutionRequest request = createRequest( baseDirectory,
+ goals,
+ settings,
+ eventDispatcher,
+ loggerManager,
+ profileManager,
+ executionProperties,
+ failureType,
+
globalChecksumPolicy,
+ showErrors,
+ recursive,
+ offline,
+ updateSnapshots
+ );
- if ( commandLine.hasOption( CLIManager.SUPPRESS_PLUGIN_REGISTRY ) )
- {
- settings.setUsePluginRegistry( false );
- }
+ request.setReactorActive( reactorActive );
- // Create settings runtime info
+ request.setPomFile( alternatePomFile );
- settings.setRuntimeInfo( createRuntimeInfo( commandLine, settings ) );
+ WagonManager wagonManager = (WagonManager) embedder.lookup(
WagonManager.ROLE );
- return settings;
- }
+ wagonManager.setDownloadMonitor( transferListener );
- private static RuntimeInfo createRuntimeInfo( CommandLine commandLine,
Settings settings )
- {
- RuntimeInfo runtimeInfo = new RuntimeInfo( settings );
+ wagonManager.setInteractive( interactive );
- if ( commandLine.hasOption( CLIManager.FORCE_PLUGIN_UPDATES ) ||
- commandLine.hasOption( CLIManager.FORCE_PLUGIN_UPDATES2 ) )
+ Maven maven = (Maven) embedder.lookup( Maven.ROLE );
+
+ maven.execute( request );
+ }
+ catch ( SettingsConfigurationException e )
{
- runtimeInfo.setPluginUpdateOverride( Boolean.TRUE );
+ showError( "Error reading settings.xml: " + e.getMessage(), e,
showErrors );
+
+ return 1;
}
- else if ( commandLine.hasOption( CLIManager.SUPPRESS_PLUGIN_UPDATES ) )
+ catch ( ComponentLookupException e )
{
- runtimeInfo.setPluginUpdateOverride( Boolean.FALSE );
+ showFatalError( "Unable to configure the Maven application", e,
showErrors );
+
+ return 1;
+ }
+ catch ( MavenExecutionException e )
+ {
+ return 1;
}
- return runtimeInfo;
+ return 0;
}
-
private static void showFatalError( String message, Exception e, boolean
show )
{
System.err.println( "FATAL ERROR: " + message );
@@ -370,133 +418,6 @@
}
}
- private static MavenExecutionRequest createRequest( CommandLine
commandLine, Settings settings,
- EventDispatcher
eventDispatcher, LoggerManager loggerManager,
- ProfileManager
profileManager, Properties executionProperties,
- boolean showErrors )
- throws ComponentLookupException
- {
- MavenExecutionRequest request;
-
- ArtifactRepository localRepository = createLocalRepository( embedder,
settings, commandLine );
-
- File userDir = new File( System.getProperty( "user.dir" ) );
-
- request = new DefaultMavenExecutionRequest( localRepository, settings,
eventDispatcher,
- commandLine.getArgList(),
userDir.getPath(), profileManager,
- executionProperties,
showErrors );
-
- // TODO [BP]: do we set one per mojo? where to do it?
- Logger logger = loggerManager.getLoggerForComponent( Mojo.ROLE );
-
- if ( logger != null )
- {
- request.addEventMonitor( new DefaultEventMonitor( logger ) );
- }
-
- if ( commandLine.hasOption( CLIManager.NON_RECURSIVE ) )
- {
- request.setRecursive( false );
- }
-
- if ( commandLine.hasOption( CLIManager.FAIL_FAST ) )
- {
- request.setFailureBehavior( ReactorManager.FAIL_FAST );
- }
- else if ( commandLine.hasOption( CLIManager.FAIL_AT_END ) )
- {
- request.setFailureBehavior( ReactorManager.FAIL_AT_END );
- }
- else if ( commandLine.hasOption( CLIManager.FAIL_NEVER ) )
- {
- request.setFailureBehavior( ReactorManager.FAIL_NEVER );
- }
-
- return request;
- }
-
- private static void setProjectFileOptions( CommandLine commandLine,
MavenExecutionRequest request )
- {
- if ( commandLine.hasOption( CLIManager.REACTOR ) )
- {
- request.setReactorActive( true );
- }
- else if ( commandLine.hasOption( CLIManager.ALTERNATE_POM_FILE ) )
- {
- request.setPomFile( commandLine.getOptionValue(
CLIManager.ALTERNATE_POM_FILE ) );
- }
- }
-
- private static Maven createMavenInstance( boolean interactive )
- throws ComponentLookupException
- {
- // TODO [BP]: doing this here as it is CLI specific, though it doesn't
feel like the right place (likewise logger).
- WagonManager wagonManager = (WagonManager) embedder.lookup(
WagonManager.ROLE );
- if ( interactive )
- {
- wagonManager.setDownloadMonitor( new ConsoleDownloadMonitor() );
- }
- else
- {
- wagonManager.setDownloadMonitor( new BatchModeDownloadMonitor() );
- }
-
- wagonManager.setInteractive( interactive );
-
- return (Maven) embedder.lookup( Maven.ROLE );
- }
-
- private static ArtifactRepository createLocalRepository( Embedder
embedder, Settings settings,
- CommandLine
commandLine )
- throws ComponentLookupException
- {
- // TODO: release
- // TODO: something in plexus to show all active hooks?
- ArtifactRepositoryLayout repositoryLayout =
- (ArtifactRepositoryLayout) embedder.lookup(
ArtifactRepositoryLayout.ROLE, "default" );
-
- ArtifactRepositoryFactory artifactRepositoryFactory =
- (ArtifactRepositoryFactory) embedder.lookup(
ArtifactRepositoryFactory.ROLE );
-
- String url = settings.getLocalRepository();
-
- if ( !url.startsWith( "file:" ) )
- {
- url = "file://" + url;
- }
-
- ArtifactRepository localRepository = new DefaultArtifactRepository(
"local", url, repositoryLayout );
-
- boolean snapshotPolicySet = false;
-
- if ( commandLine.hasOption( CLIManager.OFFLINE ) )
- {
- settings.setOffline( true );
-
- snapshotPolicySet = true;
- }
-
- if ( !snapshotPolicySet && commandLine.hasOption(
CLIManager.UPDATE_SNAPSHOTS ) )
- {
- artifactRepositoryFactory.setGlobalUpdatePolicy(
ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS );
- }
-
- if ( commandLine.hasOption( CLIManager.CHECKSUM_FAILURE_POLICY ) )
- {
- System.out.println( "+ Enabling strict checksum verification on
all artifact downloads." );
-
- artifactRepositoryFactory.setGlobalChecksumPolicy(
ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL );
- }
- else if ( commandLine.hasOption( CLIManager.CHECKSUM_WARNING_POLICY ) )
- {
- System.out.println( "+ Disabling strict checksum verification on
all artifact downloads." );
-
- artifactRepositoryFactory.setGlobalChecksumPolicy(
ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN );
- }
-
- return localRepository;
- }
-
private static void showVersion()
{
InputStream resourceAsStream;
@@ -506,15 +427,15 @@
resourceAsStream =
MavenCli.class.getClassLoader().getResourceAsStream(
"META-INF/maven/org.apache.maven/maven-core/pom.properties" );
properties.load( resourceAsStream );
-
- if( properties.getProperty( "builtOn" ) != null )
+
+ if ( properties.getProperty( "builtOn" ) != null )
{
- System.out.println( "Maven version: " + properties.getProperty(
"version", "unknown" )
- + " built on " + properties.getProperty( "builtOn" ) );
+ System.out.println( "Maven version: " +
properties.getProperty( "version", "unknown" )
+ + " built on " + properties.getProperty( "builtOn" ) );
}
else
{
- System.out.println( "Maven version: " + properties.getProperty(
"version", "unknown" ) );
+ System.out.println( "Maven version: " +
properties.getProperty( "version", "unknown" ) );
}
}
catch ( IOException e )
@@ -714,5 +635,148 @@
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp( "mvn [options] [<goal(s)>] [<phase(s)>]",
"\nOptions:", options, "\n" );
}
+ }
+
+ // ----------------------------------------------------------------------
+ // Methods that are now decoupled from the CLI, we want to push these
+ // into DefaultMaven and use them in the embedder as well.
+ // ----------------------------------------------------------------------
+
+ private static MavenExecutionRequest createRequest( File baseDirectory,
+ List goals,
+ Settings settings,
+ EventDispatcher
eventDispatcher,
+ LoggerManager
loggerManager,
+ ProfileManager
profileManager,
+ Properties
executionProperties,
+ String failureType,
+ String
globalChecksumPolicy,
+ boolean showErrors,
+ boolean recursive,
+ boolean offline,
+ boolean updateSnapshots
+ )
+ throws ComponentLookupException
+ {
+ MavenExecutionRequest request;
+
+ ArtifactRepository localRepository = createLocalRepository( embedder,
settings, offline, updateSnapshots, globalChecksumPolicy );
+
+ request = new DefaultMavenExecutionRequest( localRepository,
+ settings,
+ eventDispatcher,
+ goals,
+
baseDirectory.getAbsolutePath(),
+ profileManager,
+ executionProperties,
+ showErrors );
+
+ Logger logger = loggerManager.getLoggerForComponent( Mojo.ROLE );
+
+ request.addEventMonitor( new DefaultEventMonitor( logger ) );
+
+ if ( !recursive )
+ {
+ request.setRecursive( false );
+ }
+
+ request.setFailureBehavior( failureType );
+
+ return request;
+ }
+
+ private static ArtifactRepository createLocalRepository( Embedder embedder,
+ Settings settings,
+ boolean offline,
+ boolean
updateSnapshots,
+ String
globalChecksumPolicy )
+ throws ComponentLookupException
+ {
+ // TODO: release
+ // TODO: something in plexus to show all active hooks?
+ ArtifactRepositoryLayout repositoryLayout =
+ (ArtifactRepositoryLayout) embedder.lookup(
ArtifactRepositoryLayout.ROLE, "default" );
+
+ ArtifactRepositoryFactory artifactRepositoryFactory =
+ (ArtifactRepositoryFactory) embedder.lookup(
ArtifactRepositoryFactory.ROLE );
+
+ String url = settings.getLocalRepository();
+
+ if ( !url.startsWith( "file:" ) )
+ {
+ url = "file://" + url;
+ }
+
+ ArtifactRepository localRepository = new DefaultArtifactRepository(
"local", url, repositoryLayout );
+
+ boolean snapshotPolicySet = false;
+
+ if ( offline )
+ {
+ settings.setOffline( true );
+
+ snapshotPolicySet = true;
+ }
+
+ if ( !snapshotPolicySet && updateSnapshots )
+ {
+ artifactRepositoryFactory.setGlobalUpdatePolicy(
ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS );
+ }
+
+ artifactRepositoryFactory.setGlobalChecksumPolicy(
globalChecksumPolicy );
+
+ return localRepository;
+ }
+
+ private static Settings buildSettings( String userSettingsPath, boolean
interactive, boolean usePluginRegistry, Boolean pluginUpdateOverride )
+ throws ComponentLookupException, SettingsConfigurationException
+ {
+ Settings settings = null;
+
+ MavenSettingsBuilder settingsBuilder = (MavenSettingsBuilder)
embedder.lookup( MavenSettingsBuilder.ROLE );
+
+ try
+ {
+ if ( userSettingsPath != null )
+ {
+ File userSettingsFile = new File( userSettingsPath );
+
+ if ( userSettingsFile.exists() &&
!userSettingsFile.isDirectory() )
+ {
+ settings = settingsBuilder.buildSettings( userSettingsFile
);
+ }
+ else
+ {
+ System.out.println( "WARNING: Alternate user settings
file: " + userSettingsPath +
+ " is invalid. Using default path." );
+ }
+ }
+
+ if ( settings == null )
+ {
+ settings = settingsBuilder.buildSettings();
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new SettingsConfigurationException( "Error reading settings
file", e );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new SettingsConfigurationException( e.getMessage(),
e.getDetail(), e.getLineNumber(),
+ e.getColumnNumber() );
+ }
+
+ settings.setInteractiveMode( interactive );
+
+ settings.setUsePluginRegistry( usePluginRegistry );
+
+ RuntimeInfo runtimeInfo = new RuntimeInfo( settings );
+
+ runtimeInfo.setPluginUpdateOverride( pluginUpdateOverride );
+
+ settings.setRuntimeInfo( runtimeInfo );
+
+ return settings;
}
}
Modified:
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java
URL:
http://svn.apache.org/viewcvs/maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java?rev=380140&r1=379578&r2=380140&view=diff
==============================================================================
---
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java
(original)
+++
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java
Thu Feb 23 07:11:48 2006
@@ -24,7 +24,6 @@
public class DefaultEventMonitor
extends AbstractSelectiveEventMonitor
{
-
private static final String[] START_EVENTS = {MavenEvents.MOJO_EXECUTION};
private final Logger logger;
@@ -40,5 +39,4 @@
{
logger.info( "[" + target + "]" );
}
-
}
Copied:
maven/components/branches/maven-embedder-refactor/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
(from r379579,
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java)
URL:
http://svn.apache.org/viewcvs/maven/components/branches/maven-embedder-refactor/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java?p2=maven/components/branches/maven-embedder-refactor/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java&p1=maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java&r1=379579&r2=380140&rev=380140&view=diff
==============================================================================
---
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
(original)
+++
maven/components/branches/maven-embedder-refactor/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
Thu Feb 23 07:11:48 2006
@@ -16,7 +16,8 @@
* limitations under the License.
*/
-import org.apache.maven.BuildFailureException;
+import org.apache.maven.Maven;
+import org.apache.maven.SettingsConfigurationException;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.manager.WagonManager;
@@ -27,9 +28,9 @@
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequest;
import org.apache.maven.execution.ReactorManager;
-import org.apache.maven.lifecycle.LifecycleExecutionException;
import org.apache.maven.lifecycle.LifecycleExecutor;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
@@ -42,10 +43,10 @@
import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
import org.apache.maven.profiles.DefaultProfileManager;
import org.apache.maven.profiles.ProfileManager;
-import org.apache.maven.project.DuplicateProjectException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.reactor.MavenExecutionException;
import org.apache.maven.settings.MavenSettingsBuilder;
import org.apache.maven.settings.RuntimeInfo;
import org.apache.maven.settings.Settings;
@@ -59,8 +60,9 @@
import org.codehaus.plexus.configuration.PlexusConfiguration;
import org.codehaus.plexus.configuration.PlexusConfigurationException;
import org.codehaus.plexus.embed.Embedder;
+import org.codehaus.plexus.logging.LoggerManager;
+import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.util.DirectoryScanner;
-import org.codehaus.plexus.util.dag.CycleDetectedException;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.File;
@@ -72,10 +74,10 @@
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
+import java.util.StringTokenizer;
/**
* Class intended to be used by clients who wish to embed Maven into their
applications
@@ -120,6 +122,8 @@
private ArtifactRepositoryLayout defaultArtifactRepositoryLayout;
+ private Maven maven;
+
// ----------------------------------------------------------------------
// Configuration
// ----------------------------------------------------------------------
@@ -377,7 +381,7 @@
TransferListener transferListener,
Properties properties,
File executionRootDirectory )
- throws CycleDetectedException, LifecycleExecutionException,
BuildFailureException, DuplicateProjectException
+ throws MavenExecutionException
{
execute( Collections.singletonList( project ), goals, eventMonitor,
transferListener, properties, executionRootDirectory );
}
@@ -388,36 +392,26 @@
TransferListener transferListener,
Properties properties,
File executionRootDirectory )
- throws CycleDetectedException, LifecycleExecutionException,
BuildFailureException, DuplicateProjectException
+ throws MavenExecutionException
{
- ReactorManager rm = new ReactorManager( projects );
-
EventDispatcher eventDispatcher = new DefaultEventDispatcher();
eventDispatcher.addEventMonitor( eventMonitor );
- // If this option is set the exception seems to be hidden ...
-
- //rm.setFailureBehavior( ReactorManager.FAIL_AT_END );
-
- rm.setFailureBehavior( ReactorManager.FAIL_FAST );
-
- MavenSession session = new MavenSession( embedder.getContainer(),
- settings,
- localRepository,
- eventDispatcher,
- rm,
- goals,
-
executionRootDirectory.getAbsolutePath(),
- properties,
- new Date() );
+ LoggerManager loggerManager = new MavenEmbedderLoggerManager( new
PlexusLoggerAdapter( logger ) );
- session.setUsingPOMsFromFilesystem( true );
+ loggerManager.setThreshold( Logger.LEVEL_INFO );
- if ( transferListener != null )
- {
- wagonManager.setDownloadMonitor( transferListener );
- }
+ MavenExecutionRequest request = createRequest( settings,
+ goals,
+ eventDispatcher,
+ loggerManager,
+ profileManager,
+ executionRootDirectory,
+ properties,
+ true,
+ false,
+ null );
//
----------------------------------------------------------------------
// Maven should not be using system properties internally but because
@@ -438,9 +432,61 @@
}
}
- lifecycleExecutor.execute( session, rm, session.getEventDispatcher() );
+ if ( transferListener != null )
+ {
+ wagonManager.setDownloadMonitor( transferListener );
+ }
+
+ maven.execute( request );
+ }
+
+
+ private MavenExecutionRequest createRequest( Settings settings,
+ List goals,
+ EventDispatcher
eventDispatcher,
+ LoggerManager loggerManager,
+ ProfileManager profileManager,
+ File baseDir,
+ Properties properties,
+ boolean showErrors,
+ boolean isNonRecursive ,
+ String failureType )
+ {
+ MavenExecutionRequest request;
+
+ ArtifactRepository localRepository = createLocalRepository( settings );
+
+ request = new DefaultMavenExecutionRequest( localRepository,
+ settings,
+ eventDispatcher,
+ goals,
+ baseDir.getPath(),
+ profileManager,
+ properties,
+ showErrors );
+
+ if ( isNonRecursive )
+ {
+ request.setRecursive( false );
+ }
+
+ if ( failureType == null || failureType.equals(
ReactorManager.FAIL_FAST ) )
+ {
+ request.setFailureBehavior( ReactorManager.FAIL_FAST );
+ }
+ else if ( failureType.equals( ReactorManager.FAIL_AT_END ) )
+ {
+ request.setFailureBehavior( ReactorManager.FAIL_AT_END );
+ }
+ else if ( failureType.equals( ReactorManager.FAIL_FAST ) )
+ {
+ request.setFailureBehavior( ReactorManager.FAIL_NEVER );
+ }
+
+ return request;
}
+
// ----------------------------------------------------------------------
// Lifecycle information
// ----------------------------------------------------------------------
@@ -490,13 +536,11 @@
}
public ArtifactRepository createLocalRepository( Settings settings )
- throws ComponentLookupException
{
return createLocalRepository( settings.getLocalRepository(),
DEFAULT_LOCAL_REPO_ID );
}
public ArtifactRepository createLocalRepository( String url, String
repositoryId )
- throws ComponentLookupException
{
if ( !url.startsWith( "file:" ) )
{
@@ -507,7 +551,6 @@
}
public ArtifactRepository createRepository( String url, String
repositoryId )
- throws ComponentLookupException
{
// snapshots vs releases
// offline = to turning the update policy off
@@ -602,6 +645,8 @@
modelReader = new MavenXpp3Reader();
modelWriter = new MavenXpp3Writer();
+
+ maven = (Maven) embedder.lookup( Maven.ROLE );
pluginDescriptorBuilder = new PluginDescriptorBuilder();