clean up exception handling

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@163978 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Brett Leslie Porter 2005-04-20 04:16:11 +00:00
parent ea9b59e3ea
commit 4fe1c64276
16 changed files with 518 additions and 339 deletions

View File

@ -74,7 +74,6 @@ public class Pom
} }
public void setFile( File file ) public void setFile( File file )
throws Exception
{ {
this.file = file; this.file = file;
} }

View File

@ -23,6 +23,7 @@ import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.MavenExecutionRequest;
import org.apache.maven.execution.MavenExecutionResponse; import org.apache.maven.execution.MavenExecutionResponse;
import org.apache.maven.execution.MavenSession; import org.apache.maven.execution.MavenSession;
import org.apache.maven.lifecycle.LifecycleExecutionException;
import org.apache.maven.lifecycle.LifecycleExecutor; import org.apache.maven.lifecycle.LifecycleExecutor;
import org.apache.maven.monitor.event.EventDispatcher; import org.apache.maven.monitor.event.EventDispatcher;
import org.apache.maven.monitor.event.MavenEvents; import org.apache.maven.monitor.event.MavenEvents;
@ -32,8 +33,8 @@ import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.ProjectBuildingException; import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.reactor.ReactorException; import org.apache.maven.reactor.ReactorException;
import org.apache.maven.settings.Settings;
import org.apache.maven.settings.Proxy; import org.apache.maven.settings.Proxy;
import org.apache.maven.settings.Settings;
import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusConstants;
import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
@ -83,14 +84,15 @@ public class DefaultMaven
// Project execution // Project execution
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
public MavenExecutionResponse execute( MavenExecutionRequest request ) throws ReactorException public MavenExecutionResponse execute( MavenExecutionRequest request )
throws ReactorException
{ {
if ( request.getGoals().isEmpty() ) if ( request.getGoals().isEmpty() )
{ {
throw new ReactorException( "You must specify at least one goal. Try 'install'." ); throw new ReactorException( "You must specify at least one goal. Try 'install'." );
} }
if( request.getSettings().getActiveProfile().isOffline() ) if ( request.getSettings().getActiveProfile().isOffline() )
{ {
getLogger().info( "Maven is running in offline mode." ); getLogger().info( "Maven is running in offline mode." );
} }
@ -201,11 +203,19 @@ public class DefaultMaven
} }
private MavenExecutionResponse processProject( MavenExecutionRequest request, MavenProject project, private MavenExecutionResponse processProject( MavenExecutionRequest request, MavenProject project,
EventDispatcher dispatcher, List goals ) throws Exception EventDispatcher dispatcher, List goals )
throws LifecycleExecutionException
{ {
MavenSession session = createSession( request, project ); MavenSession session = createSession( request, project );
resolveParameters( request ); try
{
resolveParameters( request );
}
catch ( ComponentLookupException e )
{
throw new LifecycleExecutionException( "Unable to configure Maven for execution", e );
}
// !! This is ripe for refactoring to an aspect. // !! This is ripe for refactoring to an aspect.
// Event monitoring. // Event monitoring.
@ -221,7 +231,7 @@ public class DefaultMaven
dispatcher.dispatchEnd( event, project.getId() ); dispatcher.dispatchEnd( event, project.getId() );
} }
catch ( Exception e ) catch ( LifecycleExecutionException e )
{ {
dispatcher.dispatchError( event, project.getId(), e ); dispatcher.dispatchError( event, project.getId(), e );
throw e; throw e;
@ -261,7 +271,8 @@ public class DefaultMaven
return response; return response;
} }
public MavenProject getProject( File pom, ArtifactRepository localRepository ) throws ProjectBuildingException public MavenProject getProject( File pom, ArtifactRepository localRepository )
throws ProjectBuildingException
{ {
if ( pom.exists() ) if ( pom.exists() )
{ {
@ -293,11 +304,11 @@ public class DefaultMaven
/** /**
* @todo [BP] this might not be required if there is a better way to pass * @todo [BP] this might not be required if there is a better way to pass
* them in. It doesn't feel quite right. * them in. It doesn't feel quite right.
*
* @todo [JC] we should at least provide a mapping of protocol-to-proxy for * @todo [JC] we should at least provide a mapping of protocol-to-proxy for
* the wagons, shouldn't we? * the wagons, shouldn't we?
*/ */
private void resolveParameters( MavenExecutionRequest request ) throws ComponentLookupException private void resolveParameters( MavenExecutionRequest request )
throws ComponentLookupException
{ {
WagonManager wagonManager = (WagonManager) container.lookup( WagonManager.ROLE ); WagonManager wagonManager = (WagonManager) container.lookup( WagonManager.ROLE );
@ -317,7 +328,8 @@ public class DefaultMaven
// Lifecylce Management // Lifecylce Management
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
public void contextualize( Context context ) throws ContextException public void contextualize( Context context )
throws ContextException
{ {
container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY ); container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
} }
@ -394,9 +406,8 @@ public class DefaultMaven
Runtime r = Runtime.getRuntime(); Runtime r = Runtime.getRuntime();
getLogger().info( getLogger().info( "Final Memory: " + ( ( r.totalMemory() - r.freeMemory() ) / mb ) + "M/" +
"Final Memory: " + ( ( r.totalMemory() - r.freeMemory() ) / mb ) + "M/" ( r.totalMemory() / mb ) + "M" );
+ ( r.totalMemory() / mb ) + "M" );
} }
protected void line() protected void line()

View File

@ -40,16 +40,21 @@ import org.apache.maven.monitor.event.DefaultEventMonitor;
import org.apache.maven.monitor.event.EventDispatcher; import org.apache.maven.monitor.event.EventDispatcher;
import org.apache.maven.monitor.logging.DefaultLog; import org.apache.maven.monitor.logging.DefaultLog;
import org.apache.maven.plugin.Plugin; import org.apache.maven.plugin.Plugin;
import org.apache.maven.settings.Settings; import org.apache.maven.reactor.ReactorException;
import org.apache.maven.settings.MavenSettingsBuilder; import org.apache.maven.settings.MavenSettingsBuilder;
import org.apache.maven.settings.Profile; import org.apache.maven.settings.Profile;
import org.apache.maven.settings.Settings;
import org.codehaus.classworlds.ClassWorld; import org.codehaus.classworlds.ClassWorld;
import org.codehaus.plexus.PlexusContainerException;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.embed.ArtifactEnabledEmbedder; import org.codehaus.plexus.embed.ArtifactEnabledEmbedder;
import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.logging.LoggerManager; import org.codehaus.plexus.logging.LoggerManager;
import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.net.URL; import java.net.URL;
import java.util.Collections; import java.util.Collections;
@ -67,7 +72,6 @@ public class MavenCli
public static File userDir = new File( System.getProperty( "user.dir" ) ); public static File userDir = new File( System.getProperty( "user.dir" ) );
public static int main( String[] args, ClassWorld classWorld ) public static int main( String[] args, ClassWorld classWorld )
throws Exception
{ {
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
// Setup the command line parser // Setup the command line parser
@ -75,7 +79,17 @@ public class MavenCli
CLIManager cliManager = new CLIManager(); CLIManager cliManager = new CLIManager();
CommandLine commandLine = cliManager.parse( args ); CommandLine commandLine;
try
{
commandLine = cliManager.parse( args );
}
catch ( ParseException e )
{
System.err.println( "Unable to parse command line options: " + e.getMessage() );
cliManager.displayHelp();
return 1;
}
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
// //
@ -95,6 +109,8 @@ public class MavenCli
initializeSystemProperties( commandLine ); initializeSystemProperties( commandLine );
boolean debug = commandLine.hasOption( CLIManager.DEBUG );
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
// Process particular command line options // Process particular command line options
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
@ -106,10 +122,218 @@ public class MavenCli
} }
if ( commandLine.hasOption( CLIManager.VERSION ) ) if ( commandLine.hasOption( CLIManager.VERSION ) )
{ {
// TODO: is there a beter way? Maybe read the manifest? showVersion();
String version = "unknown"; return 0;
}
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.
// ----------------------------------------------------------------------
ArtifactEnabledEmbedder embedder = new ArtifactEnabledEmbedder();
try
{
embedder.start( classWorld );
}
catch ( PlexusContainerException e )
{
showFatalError( "Unable to start the embedded plexus container", e, debug );
return 1;
}
Settings settings;
try
{
MavenSettingsBuilder settingsBuilder = (MavenSettingsBuilder) embedder.lookup( MavenSettingsBuilder.ROLE );
settings = settingsBuilder.buildSettings();
}
catch ( IOException e )
{
showFatalError( "Unable to read settings.xml", e, debug );
return 1;
}
catch ( XmlPullParserException e )
{
showFatalError( "Unable to read settings.xml", e, debug );
return 1;
}
catch ( ComponentLookupException e )
{
showFatalError( "Unable to read settings.xml", e, debug );
return 1;
}
List projectFiles = null;
try
{
projectFiles = getProjectFiles( commandLine );
}
catch ( IOException e )
{
showFatalError( "Error locating project files for reactor execution", e, debug );
return 1;
}
Maven maven = null;
MavenExecutionRequest request = null;
try
{
maven = createMavenInstance( embedder );
request = createRequest( projectFiles, embedder, commandLine, settings, eventDispatcher, debug );
}
catch ( ComponentLookupException e )
{
showFatalError( "Unable to configure the Maven application", e, debug );
return 1;
}
MavenExecutionResponse response = null;
try
{
response = maven.execute( request );
}
catch ( ReactorException e )
{
showFatalError( "Error executing Maven for a project", e, debug );
return 1;
}
if ( response != null && response.isExecutionFailure() )
{
return 1;
}
else
{
return 0;
}
}
private static void showFatalError( String message, Exception e, boolean debug )
{
System.err.println( "FATAL ERROR: " + message );
if ( debug )
{
e.printStackTrace();
}
else
{
System.err.println( "For more information, run with the -X flag" );
}
}
private static MavenExecutionRequest createRequest( List files, ArtifactEnabledEmbedder embedder,
CommandLine commandLine, Settings settings,
EventDispatcher eventDispatcher, boolean debug )
throws ComponentLookupException
{
MavenExecutionRequest request = null;
ArtifactRepository localRepository = createLocalRepository( embedder, settings, commandLine );
request = new DefaultMavenExecutionRequest( localRepository, settings, eventDispatcher,
commandLine.getArgList(), files, userDir.getPath() );
LoggerManager manager = (LoggerManager) embedder.lookup( LoggerManager.ROLE );
if ( debug )
{
manager.setThreshold( Logger.LEVEL_DEBUG );
}
// TODO [BP]: do we set one per mojo? where to do it?
Logger logger = manager.getLoggerForComponent( Plugin.ROLE );
if ( logger != null )
{
request.setLog( new DefaultLog( logger ) );
request.addEventMonitor( new DefaultEventMonitor( logger ) );
}
if ( commandLine.hasOption( CLIManager.NON_RECURSIVE ) )
{
request.setRecursive( false );
}
return request;
}
private static List getProjectFiles( CommandLine commandLine )
throws IOException
{
List files = Collections.EMPTY_LIST;
if ( commandLine.hasOption( CLIManager.REACTOR ) )
{
// TODO: should we now include the pom.xml in the current directory?
String includes = System.getProperty( "maven.reactor.includes", "**/" + POMv4 );
String excludes = System.getProperty( "maven.reactor.excludes", POMv4 );
files = FileUtils.getFiles( userDir, includes, excludes );
}
else
{
File projectFile = new File( userDir, POMv4 );
if ( projectFile.exists() )
{
files = Collections.singletonList( projectFile );
}
}
return files;
}
private static Maven createMavenInstance( ArtifactEnabledEmbedder embedder )
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 );
wagonManager.setDownloadMonitor( new ConsoleDownloadMonitor() );
return (Maven) embedder.lookup( Maven.ROLE );
}
private static ArtifactRepository createLocalRepository( ArtifactEnabledEmbedder embedder, Settings settings,
CommandLine commandLine )
throws ComponentLookupException
{
ArtifactRepositoryLayout repositoryLayout = (ArtifactRepositoryLayout) embedder.lookup(
ArtifactRepositoryLayout.ROLE, "default" );
ArtifactRepositoryFactory artifactRepositoryFactory = (ArtifactRepositoryFactory) embedder.lookup(
ArtifactRepositoryFactory.ROLE );
ArtifactRepository localRepository = getLocalRepository( settings, artifactRepositoryFactory, repositoryLayout );
boolean snapshotPolicySet = false;
if ( commandLine.hasOption( CLIManager.OFFLINE ) )
{
settings.getActiveProfile().setOffline( true );
// TODO: this will still check to download if the artifact does not exist locally, instead of failing as it should in offline mode
artifactRepositoryFactory.setGlobalSnapshotPolicy( ArtifactRepository.SNAPSHOT_POLICY_NEVER );
snapshotPolicySet = true;
}
if ( !snapshotPolicySet && commandLine.hasOption( CLIManager.UPDATE_SNAPSHOTS ) )
{
artifactRepositoryFactory.setGlobalSnapshotPolicy( ArtifactRepository.SNAPSHOT_POLICY_ALWAYS );
}
return localRepository;
}
private static void showVersion()
{
// TODO: is there a beter way? Maybe read the manifest?
String version = "unknown";
try
{
for ( Enumeration e = MavenCli.class.getClassLoader().getResources( "/META-INF/maven/pom.xml" ); for ( Enumeration e = MavenCli.class.getClassLoader().getResources( "/META-INF/maven/pom.xml" );
e.hasMoreElements(); ) e.hasMoreElements(); )
{ {
@ -124,121 +348,14 @@ public class MavenCli
} }
System.out.println( "Maven version: " + version ); System.out.println( "Maven version: " + version );
return 0;
} }
catch ( IOException e )
// ----------------------------------------------------------------------
// We will ultimately not require a flag to indicate the reactor as
// we should take this from the execution context i.e. what the type
// is stated as in the POM.
// ----------------------------------------------------------------------
MavenExecutionRequest request = null;
File projectFile = new File( userDir, POMv4 );
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.
// ----------------------------------------------------------------------
ArtifactEnabledEmbedder embedder = new ArtifactEnabledEmbedder();
embedder.start( classWorld );
MavenSettingsBuilder settingsBuilder = (MavenSettingsBuilder) embedder.lookup( MavenSettingsBuilder.ROLE );
Settings settings = settingsBuilder.buildSettings();
ArtifactRepositoryFactory artifactRepositoryFactory = (ArtifactRepositoryFactory) embedder.lookup(
ArtifactRepositoryFactory.ROLE );
boolean snapshotPolicySet = false;
if ( commandLine.hasOption( CLIManager.OFFLINE ) )
{ {
settings.getActiveProfile().setOffline(true); System.err.println( "Unable determine version from JAR file: " + e.getMessage() );
// TODO: this will still check to download if the artifact does not exist locally, instead of failing as it should in offline mode
artifactRepositoryFactory.setGlobalSnapshotPolicy( ArtifactRepository.SNAPSHOT_POLICY_NEVER );
snapshotPolicySet = true;
} }
catch ( XmlPullParserException e )
if ( !snapshotPolicySet && commandLine.hasOption( CLIManager.UPDATE_SNAPSHOTS ) )
{ {
artifactRepositoryFactory.setGlobalSnapshotPolicy( ArtifactRepository.SNAPSHOT_POLICY_ALWAYS ); System.err.println( "Unable to parse POM in JAR file: " + e.getMessage() );
}
ArtifactRepositoryLayout repositoryLayout = (ArtifactRepositoryLayout) embedder.lookup(
ArtifactRepositoryLayout.ROLE, "default" );
ArtifactRepository localRepository = getLocalRepository( settings, artifactRepositoryFactory, repositoryLayout );
if ( commandLine.hasOption( CLIManager.REACTOR ) )
{
// TODO: should we now include the pom.xml in the current directory?
String includes = System.getProperty( "maven.reactor.includes", "**/" + POMv4 );
String excludes = System.getProperty( "maven.reactor.excludes", POMv4 );
request = new DefaultMavenExecutionRequest( localRepository, settings, eventDispatcher,
commandLine.getArgList(), FileUtils.getFiles( userDir,
includes,
excludes ),
userDir.getPath() );
}
else
{
List files = Collections.EMPTY_LIST;
if ( projectFile.exists() )
{
files = Collections.singletonList( projectFile );
}
request = new DefaultMavenExecutionRequest( localRepository, settings, eventDispatcher,
commandLine.getArgList(), files, userDir.getPath() );
if ( commandLine.hasOption( CLIManager.NON_RECURSIVE ) )
{
request.setRecursive( false );
}
}
LoggerManager manager = (LoggerManager) embedder.lookup( LoggerManager.ROLE );
if ( commandLine.hasOption( CLIManager.DEBUG ) )
{
manager.setThreshold( Logger.LEVEL_DEBUG );
}
// TODO [BP]: do we set one per mojo? where to do it?
Logger logger = manager.getLoggerForComponent( Plugin.ROLE );
if ( logger != null )
{
request.setLog( new DefaultLog( logger ) );
request.addEventMonitor( new DefaultEventMonitor( logger ) );
}
// 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 );
wagonManager.setDownloadMonitor( new ConsoleDownloadMonitor() );
Maven maven = (Maven) embedder.lookup( Maven.ROLE );
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
MavenExecutionResponse response = maven.execute( request );
if ( response != null && response.isExecutionFailure() )
{
return 1;
}
else
{
return 0;
} }
} }
@ -355,10 +472,8 @@ public class MavenCli
// //
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
protected static ArtifactRepository getLocalRepository( Settings settings, protected static ArtifactRepository getLocalRepository( Settings settings, ArtifactRepositoryFactory repoFactory,
ArtifactRepositoryFactory repoFactory,
ArtifactRepositoryLayout repositoryLayout ) ArtifactRepositoryLayout repositoryLayout )
throws Exception
{ {
Profile profile = settings.getActiveProfile(); Profile profile = settings.getActiveProfile();

View File

@ -18,6 +18,7 @@ package org.apache.maven.lifecycle;
import org.apache.maven.artifact.handler.ArtifactHandler; import org.apache.maven.artifact.handler.ArtifactHandler;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager; import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.execution.MavenExecutionResponse; import org.apache.maven.execution.MavenExecutionResponse;
import org.apache.maven.execution.MavenSession; import org.apache.maven.execution.MavenSession;
@ -28,6 +29,8 @@ import org.apache.maven.monitor.event.EventDispatcher;
import org.apache.maven.monitor.event.MavenEvents; import org.apache.maven.monitor.event.MavenEvents;
import org.apache.maven.plugin.PluginExecutionException; import org.apache.maven.plugin.PluginExecutionException;
import org.apache.maven.plugin.PluginManager; import org.apache.maven.plugin.PluginManager;
import org.apache.maven.plugin.PluginManagerException;
import org.apache.maven.plugin.PluginNotFoundException;
import org.apache.maven.plugin.descriptor.MojoDescriptor; import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.PluginDescriptor; import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProject;
@ -139,9 +142,13 @@ public class DefaultLifecycleExecutor
{ {
response.setException( e ); response.setException( e );
} }
catch ( Exception e ) catch ( PluginNotFoundException e )
{ {
throw new LifecycleExecutionException( "Error during lifecycle execution", e ); response.setException( e );
}
catch ( ArtifactHandlerNotFoundException e )
{
response.setException( e );
} }
finally finally
{ {
@ -206,9 +213,8 @@ public class DefaultLifecycleExecutor
return plugin; return plugin;
} }
// TODO: don't throw Exception
private void processPluginConfiguration( MavenProject project, MavenSession mavenSession, Map phaseMap ) private void processPluginConfiguration( MavenProject project, MavenSession mavenSession, Map phaseMap )
throws Exception throws LifecycleExecutionException, PluginNotFoundException
{ {
for ( Iterator i = project.getPlugins().iterator(); i.hasNext(); ) for ( Iterator i = project.getPlugins().iterator(); i.hasNext(); )
{ {
@ -224,16 +230,22 @@ public class DefaultLifecycleExecutor
* to execute for that given phase. * to execute for that given phase.
* *
* @param session * @param session
* @throws Exception
*/ */
private void processPluginPhases( Plugin plugin, MavenSession session, Map phaseMap ) private void processPluginPhases( Plugin plugin, MavenSession session, Map phaseMap )
throws Exception throws LifecycleExecutionException, PluginNotFoundException
{ {
String groupId = plugin.getGroupId(); String groupId = plugin.getGroupId();
String artifactId = plugin.getArtifactId(); String artifactId = plugin.getArtifactId();
pluginManager.verifyPlugin( groupId, artifactId, session ); try
{
pluginManager.verifyPlugin( groupId, artifactId, session );
}
catch ( PluginManagerException e )
{
throw new LifecycleExecutionException( "Internal error in the plugin manager", e );
}
PluginDescriptor pluginDescriptor = pluginManager.getPluginDescriptor( groupId, artifactId ); PluginDescriptor pluginDescriptor = pluginManager.getPluginDescriptor( groupId, artifactId );
@ -288,7 +300,7 @@ public class DefaultLifecycleExecutor
*/ */
private void configureMojo( MojoDescriptor mojoDescriptor, Map phaseMap, Settings settings ) private void configureMojo( MojoDescriptor mojoDescriptor, Map phaseMap, Settings settings )
{ {
if( settings.getActiveProfile().isOffline() && mojoDescriptor.requiresOnline() ) if ( settings.getActiveProfile().isOffline() && mojoDescriptor.requiresOnline() )
{ {
String goal = mojoDescriptor.getGoal(); String goal = mojoDescriptor.getGoal();
getLogger().warn( goal + " requires online mode, but maven is currently offline. Disabling " + goal + "." ); getLogger().warn( goal + " requires online mode, but maven is currently offline. Disabling " + goal + "." );
@ -305,7 +317,7 @@ public class DefaultLifecycleExecutor
} }
private void processGoalChain( String task, MavenSession session, Map phaseMap ) private void processGoalChain( String task, MavenSession session, Map phaseMap )
throws Exception throws LifecycleExecutionException, PluginNotFoundException
{ {
if ( phaseMap.containsKey( task ) ) if ( phaseMap.containsKey( task ) )
{ {
@ -337,7 +349,7 @@ public class DefaultLifecycleExecutor
} }
private void verifyMojoPhase( String task, MavenSession session, Map phaseMap ) private void verifyMojoPhase( String task, MavenSession session, Map phaseMap )
throws Exception throws LifecycleExecutionException, PluginNotFoundException
{ {
MojoDescriptor mojoDescriptor = pluginManager.getMojoDescriptor( task ); MojoDescriptor mojoDescriptor = pluginManager.getMojoDescriptor( task );
@ -356,7 +368,14 @@ public class DefaultLifecycleExecutor
injectHandlerPluginConfiguration( session.getProject(), groupId, artifactId ); injectHandlerPluginConfiguration( session.getProject(), groupId, artifactId );
pluginManager.verifyPluginForGoal( task, session ); try
{
pluginManager.verifyPluginForGoal( task, session );
}
catch ( PluginManagerException e )
{
throw new LifecycleExecutionException( "Internal error in the plugin manager", e );
}
mojoDescriptor = pluginManager.getMojoDescriptor( task ); mojoDescriptor = pluginManager.getMojoDescriptor( task );
@ -370,7 +389,7 @@ public class DefaultLifecycleExecutor
} }
private void executePhase( String phase, MavenSession session, Map phaseMap ) private void executePhase( String phase, MavenSession session, Map phaseMap )
throws PluginExecutionException throws PluginExecutionException, PluginNotFoundException
{ {
// only execute up to the given phase // only execute up to the given phase
int index = phases.indexOf( phaseMap.get( phase ) ); int index = phases.indexOf( phaseMap.get( phase ) );
@ -411,7 +430,7 @@ public class DefaultLifecycleExecutor
} }
protected void executeMojo( String id, MavenSession session ) protected void executeMojo( String id, MavenSession session )
throws PluginExecutionException throws PluginExecutionException, PluginNotFoundException
{ {
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
// We have something of the form <pluginId>:<mojoId>, so this might be // We have something of the form <pluginId>:<mojoId>, so this might be

View File

@ -38,6 +38,7 @@ import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.path.PathTranslator; import org.apache.maven.project.path.PathTranslator;
import org.apache.maven.settings.MavenSettingsBuilder; import org.apache.maven.settings.MavenSettingsBuilder;
import org.codehaus.plexus.ArtifactEnabledContainer; import org.codehaus.plexus.ArtifactEnabledContainer;
import org.codehaus.plexus.ArtifactEnabledContainerException;
import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusConstants;
import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.component.configurator.ComponentConfigurationException; import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
@ -47,6 +48,7 @@ import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator
import org.codehaus.plexus.component.discovery.ComponentDiscoveryEvent; import org.codehaus.plexus.component.discovery.ComponentDiscoveryEvent;
import org.codehaus.plexus.component.discovery.ComponentDiscoveryListener; import org.codehaus.plexus.component.discovery.ComponentDiscoveryListener;
import org.codehaus.plexus.component.repository.ComponentSetDescriptor; import org.codehaus.plexus.component.repository.ComponentSetDescriptor;
import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.configuration.PlexusConfiguration; import org.codehaus.plexus.configuration.PlexusConfiguration;
import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration; import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
@ -93,6 +95,8 @@ public class DefaultPluginManager
protected ComponentConfigurator configurator; protected ComponentConfigurator configurator;
private ArtifactFactory artifactFactory;
public DefaultPluginManager() public DefaultPluginManager()
{ {
mojoDescriptors = new HashMap(); mojoDescriptors = new HashMap();
@ -194,80 +198,91 @@ public class DefaultPluginManager
return pluginDescriptors.containsKey( PluginDescriptor.constructPluginKey( groupId, artifactId ) ); return pluginDescriptors.containsKey( PluginDescriptor.constructPluginKey( groupId, artifactId ) );
} }
// TODO: don't throw Exception
public void verifyPluginForGoal( String goalName, MavenSession session ) public void verifyPluginForGoal( String goalName, MavenSession session )
throws Exception throws PluginNotFoundException, PluginManagerException
{ {
String pluginId = PluginDescriptor.getPluginIdFromGoal( goalName ); String pluginId = PluginDescriptor.getPluginIdFromGoal( goalName );
verifyPlugin( PluginDescriptor.getDefaultPluginGroupId(), pluginId, session ); verifyPlugin( PluginDescriptor.getDefaultPluginGroupId(), pluginId, session );
} }
// TODO: don't throw Exception
public void verifyPlugin( String groupId, String artifactId, MavenSession session ) public void verifyPlugin( String groupId, String artifactId, MavenSession session )
throws Exception throws PluginNotFoundException, PluginManagerException
{ {
if ( !isPluginInstalled( groupId, artifactId ) ) if ( !isPluginInstalled( groupId, artifactId ) )
{ {
ArtifactFactory artifactFactory = null; MavenProject project = session.getProject();
org.apache.maven.model.Plugin pluginConfig = null;
for ( Iterator it = project.getPlugins().iterator(); it.hasNext(); )
{
org.apache.maven.model.Plugin plugin = (org.apache.maven.model.Plugin) it.next();
if ( groupId.equals( plugin.getGroupId() ) && artifactId.equals( plugin.getArtifactId() ) )
{
pluginConfig = plugin;
break;
}
}
String version = null;
if ( pluginConfig != null )
{
if ( StringUtils.isEmpty( pluginConfig.getVersion() ) )
{
// The model/project builder should have validated this already
String message = "The maven plugin with groupId: '" + groupId + "' and artifactId: '" + artifactId +
"' which was configured for use in this project does not have a version associated with it.";
throw new IllegalStateException( message );
}
else
{
version = pluginConfig.getVersion();
}
}
try try
{ {
MavenProject project = session.getProject();
org.apache.maven.model.Plugin pluginConfig = null;
for ( Iterator it = project.getPlugins().iterator(); it.hasNext(); )
{
org.apache.maven.model.Plugin plugin = (org.apache.maven.model.Plugin) it.next();
if ( groupId.equals( plugin.getGroupId() ) && artifactId.equals( plugin.getArtifactId() ) )
{
pluginConfig = plugin;
break;
}
}
String version = null;
if ( pluginConfig != null )
{
if ( StringUtils.isEmpty( pluginConfig.getVersion() ) )
{
throw new PluginVersionNotConfiguredException( groupId, artifactId );
}
else
{
version = pluginConfig.getVersion();
}
}
// TODO: Default over to a sensible value (is 1.0-SNAPSHOT right?) Hardcoging of group ID also
if ( StringUtils.isEmpty( version ) )
{
version = "1.0-SNAPSHOT";
}
artifactFactory = (ArtifactFactory) container.lookup( ArtifactFactory.ROLE );
Artifact pluginArtifact = artifactFactory.createArtifact( groupId, artifactId, version, null, Artifact pluginArtifact = artifactFactory.createArtifact( groupId, artifactId, version, null,
MAVEN_PLUGIN, null ); MAVEN_PLUGIN, null );
addPlugin( pluginArtifact, session ); addPlugin( pluginArtifact, session );
} }
catch ( ArtifactEnabledContainerException e )
{
throw new PluginManagerException( "Error occurred in the artifact container attempting to download plugin " +
groupId + ":" + artifactId, e );
}
catch ( ArtifactResolutionException e )
{
throw new PluginNotFoundException( groupId, artifactId, version, e );
}
catch ( ComponentLookupException e )
{
throw new PluginManagerException( "Internal configuration error while retrieving " + groupId + ":" + artifactId, e );
}
finally finally
{ {
if ( artifactFactory != null ) if ( artifactFactory != null )
{ {
container.release( artifactFactory ); try
{
container.release( artifactFactory );
}
catch ( ComponentLifecycleException e )
{
getLogger().error( "Error releasing component - ignoring", e );
}
} }
} }
} }
} }
// TODO: don't throw Exception
protected void addPlugin( Artifact pluginArtifact, MavenSession session ) protected void addPlugin( Artifact pluginArtifact, MavenSession session )
throws Exception throws ArtifactEnabledContainerException, ArtifactResolutionException, ComponentLookupException
{ {
ArtifactResolver artifactResolver = null; ArtifactResolver artifactResolver = null;
MavenProjectBuilder mavenProjectBuilder = null; MavenProjectBuilder mavenProjectBuilder = null;
@ -287,14 +302,27 @@ public class DefaultPluginManager
} }
finally finally
{ {
// TODO: watch out for the exceptions being thrown
if ( artifactResolver != null ) if ( artifactResolver != null )
{ {
container.release( artifactResolver ); try
{
container.release( artifactResolver );
}
catch ( ComponentLifecycleException e )
{
getLogger().error( "Error releasing component - ignoring", e );
}
} }
if ( mavenProjectBuilder != null ) if ( mavenProjectBuilder != null )
{ {
container.release( mavenProjectBuilder ); try
{
container.release( mavenProjectBuilder );
}
catch ( ComponentLifecycleException e )
{
getLogger().error( "Error releasing component - ignoring", e );
}
} }
} }
} }
@ -304,7 +332,7 @@ public class DefaultPluginManager
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
public void executeMojo( MavenSession session, String goalName ) public void executeMojo( MavenSession session, String goalName )
throws PluginExecutionException throws PluginExecutionException, PluginNotFoundException
{ {
try try
{ {
@ -400,7 +428,7 @@ public class DefaultPluginManager
{ {
if ( newMojoTechnique ) if ( newMojoTechnique )
{ {
Map map = getPluginConfigurationFromExpressions( mojoDescriptor, configuration, session, Map map = getPluginConfigurationFromExpressions( mojoDescriptor, configuration,
expressionEvaluator ); expressionEvaluator );
populatePluginFields( plugin, configuration, map, expressionEvaluator ); populatePluginFields( plugin, configuration, map, expressionEvaluator );
@ -409,7 +437,7 @@ public class DefaultPluginManager
{ {
getLogger().warn( "WARNING: The mojo " + mojoDescriptor.getId() + " is using the OLD API" ); getLogger().warn( "WARNING: The mojo " + mojoDescriptor.getId() + " is using the OLD API" );
Map map = getPluginConfigurationFromExpressions( mojoDescriptor, configuration, session, Map map = getPluginConfigurationFromExpressions( mojoDescriptor, configuration,
expressionEvaluator ); expressionEvaluator );
request = createPluginRequest( configuration, map ); request = createPluginRequest( configuration, map );
@ -641,7 +669,7 @@ public class DefaultPluginManager
* @deprecated * @deprecated
*/ */
private Map getPluginConfigurationFromExpressions( MojoDescriptor goal, PlexusConfiguration configuration, private Map getPluginConfigurationFromExpressions( MojoDescriptor goal, PlexusConfiguration configuration,
MavenSession session, ExpressionEvaluator expressionEvaluator ) ExpressionEvaluator expressionEvaluator )
throws ExpressionEvaluationException, PluginConfigurationException throws ExpressionEvaluationException, PluginConfigurationException
{ {
List parameters = goal.getParameters(); List parameters = goal.getParameters();

View File

@ -30,17 +30,15 @@ public interface PluginManager
String ROLE = PluginManager.class.getName(); String ROLE = PluginManager.class.getName();
void executeMojo( MavenSession session, String goalName ) void executeMojo( MavenSession session, String goalName )
throws PluginExecutionException; throws PluginExecutionException, PluginNotFoundException;
MojoDescriptor getMojoDescriptor( String goalId ); MojoDescriptor getMojoDescriptor( String goalId );
// TODO: don't throw Exception
void verifyPluginForGoal( String goalName, MavenSession session ) void verifyPluginForGoal( String goalName, MavenSession session )
throws Exception; throws PluginNotFoundException, PluginManagerException;
// TODO: don't throw Exception
void verifyPlugin( String groupId, String artifactId, MavenSession session ) void verifyPlugin( String groupId, String artifactId, MavenSession session )
throws Exception; throws PluginNotFoundException, PluginManagerException;
PluginDescriptor getPluginDescriptor( String groupId, String artifactId ); PluginDescriptor getPluginDescriptor( String groupId, String artifactId );
} }

View File

@ -0,0 +1,31 @@
package org.apache.maven.plugin;
/*
* Copyright 2001-2005 The Apache Software Foundation.
*
* Licensed 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.
*/
/**
* Exception in the plugin manager.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @version $Id$
*/
public class PluginManagerException
extends Exception
{
public PluginManagerException( String message, Exception e )
{
}
}

View File

@ -0,0 +1,36 @@
package org.apache.maven.plugin;
/*
* Copyright 2001-2005 The Apache Software Foundation.
*
* Licensed 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 org.apache.maven.artifact.resolver.ArtifactResolutionException;
/**
* Exception occurring trying to resolve a plugin.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @version $Id$
*/
public class PluginNotFoundException
extends Throwable
{
public PluginNotFoundException( String groupId, String artifactId, String version, ArtifactResolutionException e )
{
super(
"Plugin could not found in any remote repositories: [" + groupId + ":" + artifactId + ":" + version + "]",
e );
}
}

View File

@ -1,51 +0,0 @@
package org.apache.maven.plugin;
/* ====================================================================
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed 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.
* ====================================================================
*/
/**
* @author jdcasey
*/
public class PluginVersionNotConfiguredException
extends Exception
{
private final String groupId;
private final String artifactId;
public PluginVersionNotConfiguredException( String groupId, String artifactId )
{
super( "The maven plugin with groupId: \'" + groupId + "\' and artifactId: \'" + artifactId
+ "\' which was configured for use in this project does not have a version associated with it." );
this.groupId = groupId;
this.artifactId = artifactId;
}
public String getGroupId()
{
return groupId;
}
public String getArtifactId()
{
return artifactId;
}
}

View File

@ -127,16 +127,7 @@ public class DefaultMavenProjectBuilder
// Always cache files in the source tree over those in the repository // Always cache files in the source tree over those in the repository
modelCache.put( createCacheKey( model.getGroupId(), model.getArtifactId(), model.getVersion() ), model ); modelCache.put( createCacheKey( model.getGroupId(), model.getArtifactId(), model.getVersion() ), model );
Settings settings = null; Settings settings = readSettings();
try
{
settings = mavenSettingsBuilder.buildSettings();
}
catch ( Exception e )
{
throw new ProjectBuildingException( "Cannot read settings.", e );
}
boolean systemOnline = !settings.getActiveProfile().isOffline(); boolean systemOnline = !settings.getActiveProfile().isOffline();
@ -156,8 +147,13 @@ public class DefaultMavenProjectBuilder
return project; return project;
} }
public MavenProject buildFromRepository( Artifact artifact, List remoteArtifactRepositories, /**
ArtifactRepository localRepository ) * @return
* @throws ProjectBuildingException
* @todo shouldn't be re-reading all the time - perhaps cache, but check a timestamp so you can detect and reload on
* changes in a long running process
*/
private Settings readSettings()
throws ProjectBuildingException throws ProjectBuildingException
{ {
Settings settings = null; Settings settings = null;
@ -170,6 +166,14 @@ public class DefaultMavenProjectBuilder
{ {
throw new ProjectBuildingException( "Cannot read settings.", e ); throw new ProjectBuildingException( "Cannot read settings.", e );
} }
return settings;
}
public MavenProject buildFromRepository( Artifact artifact, List remoteArtifactRepositories,
ArtifactRepository localRepository )
throws ProjectBuildingException
{
Settings settings = readSettings();
Model model = findModelFromRepository( artifact, remoteArtifactRepositories, localRepository ); Model model = findModelFromRepository( artifact, remoteArtifactRepositories, localRepository );
@ -304,16 +308,6 @@ public class DefaultMavenProjectBuilder
if ( resolveDependencies ) if ( resolveDependencies )
{ {
Settings settings;
try
{
settings = mavenSettingsBuilder.buildSettings();
}
catch ( Exception e )
{
throw new ProjectBuildingException( "Cannot read settings.", e );
}
MavenMetadataSource sourceReader = new MavenMetadataSource( artifactResolver, this ); MavenMetadataSource sourceReader = new MavenMetadataSource( artifactResolver, this );
ArtifactResolutionResult result = artifactResolver.resolveTransitively( project.getArtifacts(), ArtifactResolutionResult result = artifactResolver.resolveTransitively( project.getArtifacts(),
@ -385,16 +379,7 @@ public class DefaultMavenProjectBuilder
private List buildArtifactRepositories( List repositories ) private List buildArtifactRepositories( List repositories )
throws ProjectBuildingException throws ProjectBuildingException
{ {
Settings settings = null; Settings settings = readSettings();
try
{
settings = mavenSettingsBuilder.buildSettings();
}
catch ( Exception e )
{
throw new ProjectBuildingException( "Cannot read settings.", e );
}
List repos = new ArrayList(); List repos = new ArrayList();
@ -402,20 +387,7 @@ public class DefaultMavenProjectBuilder
{ {
Repository mavenRepo = (Repository) i.next(); Repository mavenRepo = (Repository) i.next();
String layout = mavenRepo.getLayout(); ArtifactRepositoryLayout remoteRepoLayout = getRepositoryLayout( mavenRepo );
ArtifactRepositoryLayout remoteRepoLayout = null;
try
{
remoteRepoLayout =
(ArtifactRepositoryLayout) container.lookup( ArtifactRepositoryLayout.ROLE, layout );
}
catch ( ComponentLookupException e )
{
throw new ProjectBuildingException( "Cannot find layout implementation corresponding to: \'" + layout +
"\' for remote repository with id: \'" + mavenRepo.getId() + "\'.",
e );
}
ArtifactRepository artifactRepo = artifactRepositoryFactory.createArtifactRepository( mavenRepo, settings, ArtifactRepository artifactRepo = artifactRepositoryFactory.createArtifactRepository( mavenRepo, settings,
remoteRepoLayout ); remoteRepoLayout );
@ -429,30 +401,17 @@ public class DefaultMavenProjectBuilder
} }
private List buildPluginRepositories( List pluginRepositories ) private List buildPluginRepositories( List pluginRepositories )
throws Exception throws ProjectBuildingException
{ {
List remotePluginRepositories = new ArrayList(); List remotePluginRepositories = new ArrayList();
Settings settings = mavenSettingsBuilder.buildSettings(); Settings settings = readSettings();
for ( Iterator it = pluginRepositories.iterator(); it.hasNext(); ) for ( Iterator it = pluginRepositories.iterator(); it.hasNext(); )
{ {
Repository mavenRepo = (Repository) it.next(); Repository mavenRepo = (Repository) it.next();
String layout = mavenRepo.getLayout(); ArtifactRepositoryLayout repositoryLayout = getRepositoryLayout( mavenRepo );
ArtifactRepositoryLayout repositoryLayout = null;
try
{
repositoryLayout =
(ArtifactRepositoryLayout) container.lookup( ArtifactRepositoryLayout.ROLE, layout );
}
catch ( ComponentLookupException e )
{
throw new ProjectBuildingException( "Cannot find layout implementation corresponding to: \'" + layout +
"\' for remote repository with id: \'" + mavenRepo.getId() + "\'.",
e );
}
ArtifactRepository pluginRepository = artifactRepositoryFactory.createArtifactRepository( mavenRepo, ArtifactRepository pluginRepository = artifactRepositoryFactory.createArtifactRepository( mavenRepo,
settings, settings,
@ -465,20 +424,35 @@ public class DefaultMavenProjectBuilder
return remotePluginRepositories; return remotePluginRepositories;
} }
private ArtifactRepositoryLayout getRepositoryLayout( Repository mavenRepo )
throws ProjectBuildingException
{
String layout = mavenRepo.getLayout();
ArtifactRepositoryLayout repositoryLayout = null;
try
{
repositoryLayout = (ArtifactRepositoryLayout) container.lookup( ArtifactRepositoryLayout.ROLE, layout );
}
catch ( ComponentLookupException e )
{
throw new ProjectBuildingException( "Cannot find layout implementation corresponding to: \'" + layout +
"\' for remote repository with id: \'" + mavenRepo.getId() + "\'.", e );
}
return repositoryLayout;
}
private ArtifactRepository buildDistributionManagementRepository( Repository dmRepo ) private ArtifactRepository buildDistributionManagementRepository( Repository dmRepo )
throws Exception throws ProjectBuildingException
{ {
if ( dmRepo == null ) if ( dmRepo == null )
{ {
return null; return null;
} }
Settings settings = mavenSettingsBuilder.buildSettings(); Settings settings = readSettings();
String repoLayoutId = dmRepo.getLayout(); ArtifactRepositoryLayout repositoryLayout = getRepositoryLayout( dmRepo );
ArtifactRepositoryLayout repositoryLayout = (ArtifactRepositoryLayout) container.lookup(
ArtifactRepositoryLayout.ROLE, repoLayoutId );
ArtifactRepository dmArtifactRepository = artifactRepositoryFactory.createArtifactRepository( dmRepo, settings, ArtifactRepository dmArtifactRepository = artifactRepositoryFactory.createArtifactRepository( dmRepo, settings,
repositoryLayout ); repositoryLayout );

View File

@ -21,9 +21,12 @@ import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
import org.codehaus.plexus.logging.AbstractLogEnabled; import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException;
/** /**
* @author jdcasey * @author jdcasey
@ -57,9 +60,8 @@ public class DefaultMavenSettingsBuilder
// MavenSettingsBuilder Implementation // MavenSettingsBuilder Implementation
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
// TODO: don't throw Exception.
public Settings buildSettings() public Settings buildSettings()
throws Exception throws IOException, XmlPullParserException
{ {
Settings settings = null; Settings settings = null;
@ -74,6 +76,11 @@ public class DefaultMavenSettingsBuilder
settings = modelReader.read( reader ); settings = modelReader.read( reader );
} }
catch ( FileNotFoundException e )
{
// Not possible - just ignore
getLogger().warn( "Settings file disappeared - ignoring", e );
}
finally finally
{ {
IOUtil.close( reader ); IOUtil.close( reader );

View File

@ -1,5 +1,9 @@
package org.apache.maven.settings; package org.apache.maven.settings;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.IOException;
/* /*
* Copyright 2001-2005 The Apache Software Foundation. * Copyright 2001-2005 The Apache Software Foundation.
* *
@ -24,7 +28,6 @@ public interface MavenSettingsBuilder
{ {
String ROLE = MavenSettingsBuilder.class.getName(); String ROLE = MavenSettingsBuilder.class.getName();
// TODO: Don't throw Exception.
Settings buildSettings() Settings buildSettings()
throws Exception; throws IOException, XmlPullParserException;
} }

View File

@ -117,10 +117,6 @@
| |
| |
--> -->
<component>
<role>org.apache.maven.artifact.factory.ArtifactFactory</role>
<implementation>org.apache.maven.artifact.factory.DefaultArtifactFactory</implementation>
</component>
<!-- <!--
| |
@ -233,6 +229,13 @@
</configuration> </configuration>
</component> </component>
<!-- ********************* FIXME *******************************************
| I realize this is duplicated but allows the project builder to work by itself
-->
<component>
<role>org.apache.maven.artifact.factory.ArtifactFactory</role>
<implementation>org.apache.maven.artifact.factory.DefaultArtifactFactory</implementation>
</component>
<!-- ********************* FIXME ******************************************* <!-- ********************* FIXME *******************************************
| I realize this is duplicated but allows the project builder to work by itself | I realize this is duplicated but allows the project builder to work by itself
--> -->

View File

@ -33,6 +33,9 @@
<requirement> <requirement>
<role>org.codehaus.plexus.component.configurator.ComponentConfigurator</role> <role>org.codehaus.plexus.component.configurator.ComponentConfigurator</role>
</requirement> </requirement>
<requirement>
<role>org.apache.maven.artifact.factory.ArtifactFactory</role>
</requirement>
</requirements> </requirements>
</component> </component>
<component> <component>
@ -50,5 +53,9 @@
<settingsPath>${user.home}/.m2/settings.xml</settingsPath> <settingsPath>${user.home}/.m2/settings.xml</settingsPath>
</configuration> </configuration>
</component> </component>
<component>
<role>org.apache.maven.artifact.factory.ArtifactFactory</role>
<implementation>org.apache.maven.artifact.factory.DefaultArtifactFactory</implementation>
</component>
</components> </components>
</plexus> </plexus>

View File

@ -12,7 +12,7 @@
<dependency> <dependency>
<groupId>org.codehaus.modello</groupId> <groupId>org.codehaus.modello</groupId>
<artifactId>modello-plugin-xpp3</artifactId> <artifactId>modello-plugin-xpp3</artifactId>
<version>1.0-alpha-1</version> <version>1.0-alpha-2-SNAPSHOT</version>
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>

View File

@ -97,7 +97,6 @@ public class CleanPlugin
* @param d the directory to delete * @param d the directory to delete
*/ */
protected void removeDir( File d ) protected void removeDir( File d )
throws Exception
{ {
String[] list = d.list(); String[] list = d.list();
if ( list == null ) if ( list == null )
@ -124,7 +123,7 @@ public class CleanPlugin
// } // }
// else // else
// { // {
getLog().info( message ); getLog().info( message );
// } // }
} }
} }
@ -140,7 +139,7 @@ public class CleanPlugin
// } // }
// else // else
// { // {
getLog().info( message ); getLog().info( message );
// } // }
} }
} }