From dfbae27c4410d2452ec7c9d5e26458f45d0598c0 Mon Sep 17 00:00:00 2001 From: John Dennis Casey Date: Fri, 4 Mar 2005 09:04:26 +0000 Subject: [PATCH] o Added first-pass logging and event-monitoring impls. Converted all System.out calls in maven-component plugins to use logger. git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@163457 13f79535-47bb-0310-9956-ffa450edef68 --- maven-core/pom.xml | 5 + .../java/org/apache/maven/DefaultMaven.java | 159 +++++++++++------- .../java/org/apache/maven/cli/MavenCli.java | 21 ++- .../AbstractMavenExecutionRequest.java | 34 +++- .../execution/MavenExecutionRequest.java | 11 ++ .../MavenInitializingExecutionRequest.java | 5 +- .../MavenProjectExecutionRequest.java | 4 +- .../MavenReactorExecutionRequest.java | 10 +- .../apache/maven/execution/MavenSession.java | 22 +++ .../lifecycle/DefaultLifecycleExecutor.java | 39 ++++- .../monitor/event/DefaultEventMonitor.java | 30 ++++ .../maven/monitor/logging/DefaultLog.java | 79 +++++++++ .../maven/plugin/DefaultPluginManager.java | 27 ++- .../java/org/apache/maven/MavenTestCase.java | 7 +- maven-mboot2/src/main/java/MBoot.java | 1 + maven-monitor/pom.xml | 11 ++ .../event/AbstractSelectiveEventMonitor.java | 62 +++++++ .../monitor/event/DefaultEventDispatcher.java | 48 ++++++ .../maven/monitor/event/EventDispatcher.java | 17 ++ .../maven/monitor/event/EventMonitor.java | 15 ++ .../maven/monitor/event/MavenEvents.java | 27 +++ .../org/apache/maven/monitor/logging/Log.java | 33 ++++ .../monitor/logging/SystemStreamLog.java | 108 ++++++++++++ ...stractScriptedMojoDescriptorExtractor.java | 70 ++++---- .../generator/PluginDescriptorGenerator.java | 6 +- .../java/JavaMojoDescriptorExtractor.java | 12 +- .../java/JavaMojoDescriptorExtractorTest.java | 14 +- .../maven-plugin-tools-marmalade/pom.xml | 5 + .../MarmaladeMojoDescriptorExtractor.java | 69 ++++---- .../MarmaladeMojoDescriptorExtractorTest.java | 21 +-- maven-plugin/pom.xml | 5 + .../maven/plugin/PluginExecutionRequest.java | 23 +++ maven-plugins/maven-clean-plugin/pom.xml | 7 + .../maven/plugin/clean/CleanPlugin.java | 35 ++-- maven-plugins/maven-compiler-plugin/pom.xml | 5 + .../org/apache/maven/plugin/CompilerMojo.java | 3 +- maven-plugins/maven-war-plugin/pom.xml | 5 + .../apache/maven/plugin/war/ExplodedMojo.java | 2 +- .../org/apache/maven/plugin/war/WarMojo.java | 2 +- maven-plugins/pom.xml | 5 + maven-script/maven-script-marmalade/pom.xml | 5 + .../script/marmalade/tags/ExecuteTag.java | 3 +- .../script/marmalade/tags/MetadataTag.java | 12 +- .../maven/script/marmalade/tags/MojoTag.java | 18 +- .../script/marmalade/MarmaladeMojoTest.java | 8 +- maven-script/pom.xml | 5 + 46 files changed, 901 insertions(+), 214 deletions(-) create mode 100644 maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java create mode 100644 maven-core/src/main/java/org/apache/maven/monitor/logging/DefaultLog.java create mode 100644 maven-monitor/pom.xml create mode 100644 maven-monitor/src/main/java/org/apache/maven/monitor/event/AbstractSelectiveEventMonitor.java create mode 100644 maven-monitor/src/main/java/org/apache/maven/monitor/event/DefaultEventDispatcher.java create mode 100644 maven-monitor/src/main/java/org/apache/maven/monitor/event/EventDispatcher.java create mode 100644 maven-monitor/src/main/java/org/apache/maven/monitor/event/EventMonitor.java create mode 100644 maven-monitor/src/main/java/org/apache/maven/monitor/event/MavenEvents.java create mode 100644 maven-monitor/src/main/java/org/apache/maven/monitor/logging/Log.java create mode 100644 maven-monitor/src/main/java/org/apache/maven/monitor/logging/SystemStreamLog.java diff --git a/maven-core/pom.xml b/maven-core/pom.xml index fefaee92f2..ddb5aa2b40 100644 --- a/maven-core/pom.xml +++ b/maven-core/pom.xml @@ -21,6 +21,11 @@ 1.0-alpha-2-SNAPSHOT + + maven + maven-monitor + 2.0-SNAPSHOT + maven maven-model diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java index f565152312..8bcf58824f 100644 --- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java +++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java @@ -27,6 +27,8 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.lifecycle.LifecycleExecutor; import org.apache.maven.lifecycle.goal.GoalNotFoundException; import org.apache.maven.lifecycle.session.MavenSessionPhaseManager; +import org.apache.maven.monitor.event.EventDispatcher; +import org.apache.maven.monitor.event.MavenEvents; import org.apache.maven.plugin.PluginManager; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; @@ -103,7 +105,26 @@ public class DefaultMaven resolveParameters( request ); - MavenExecutionResponse response = lifecycleExecutor.execute( request.getGoals(), session ); + // !! This is ripe for refactoring to an aspect. + // Event monitoring. + EventDispatcher dispatcher = request.getEventDispatcher(); + String event = MavenEvents.PROJECT_EXECUTION; + + dispatcher.dispatchStart( event, project.getId() ); + + MavenExecutionResponse response = null; + try + { + // Actual meat of the code. + response = lifecycleExecutor.execute( request.getGoals(), session ); + + dispatcher.dispatchEnd( event, project.getId() ); + } + catch(Exception e) + { + dispatcher.dispatchError( event, project.getId(), e ); + } + // End event monitoring. // TODO: is this perhaps more appropriate in the CLI? if ( response.isExecutionFailure() ) @@ -133,79 +154,95 @@ public class DefaultMaven public MavenExecutionResponse handleReactor( MavenReactorExecutionRequest request ) throws ReactorException { - List projects = new ArrayList(); - - getLogger().info( "Starting the reactor..." ); - + EventDispatcher dispatcher = request.getEventDispatcher(); + String event = MavenEvents.REACTOR_EXECUTION; + + dispatcher.dispatchStart( event, request.getBaseDirectory().getPath() ); try { - List files = request.getProjectFiles(); + List projects = new ArrayList(); - for ( Iterator iterator = files.iterator(); iterator.hasNext(); ) - { - File file = (File) iterator.next(); - - MavenProject project = getProject( file, request.getLocalRepository() ); - - projects.add( project ); - } - - projects = projectBuilder.getSortedProjects( projects ); - } - catch ( IOException e ) - { - throw new ReactorException( "Error processing projects for the reactor: ", e ); - } - catch ( ProjectBuildingException e ) - { - throw new ReactorException( "Error processing projects for the reactor: ", e ); - } - catch ( CycleDetectedException e ) - { - throw new ReactorException( "Error processing projects for the reactor: ", e ); - } - - getLogger().info( "Our processing order:" ); - - for ( Iterator iterator = projects.iterator(); iterator.hasNext(); ) - { - MavenProject project = (MavenProject) iterator.next(); - - getLogger().info( project.getName() ); - } - - for ( Iterator iterator = projects.iterator(); iterator.hasNext(); ) - { - MavenProject project = (MavenProject) iterator.next(); - - System.out.println( "\n\n\n" ); - - line(); - - getLogger().info( "Building " + project.getName() ); - - line(); - - MavenProjectExecutionRequest projectExecutionRequest = request.createProjectExecutionRequest( project ); + getLogger().info( "Starting the reactor..." ); try { - MavenExecutionResponse response = handleProject( projectExecutionRequest ); + List files = request.getProjectFiles(); - if ( response.isExecutionFailure() ) + for ( Iterator iterator = files.iterator(); iterator.hasNext(); ) { - return response; + File file = (File) iterator.next(); + + MavenProject project = getProject( file, request.getLocalRepository() ); + + projects.add( project ); } + + projects = projectBuilder.getSortedProjects( projects ); + } - catch ( Exception e ) + catch ( IOException e ) { - throw new ReactorException( "Error executing project within the reactor", e ); + throw new ReactorException( "Error processing projects for the reactor: ", e ); + } + catch ( ProjectBuildingException e ) + { + throw new ReactorException( "Error processing projects for the reactor: ", e ); + } + catch ( CycleDetectedException e ) + { + throw new ReactorException( "Error processing projects for the reactor: ", e ); } - } + getLogger().info( "Our processing order:" ); - // TODO: not really satisfactory - return null; + for ( Iterator iterator = projects.iterator(); iterator.hasNext(); ) + { + MavenProject project = (MavenProject) iterator.next(); + + getLogger().info( project.getName() ); + } + + for ( Iterator iterator = projects.iterator(); iterator.hasNext(); ) + { + MavenProject project = (MavenProject) iterator.next(); + + System.out.println( "\n\n\n" ); + + line(); + + getLogger().info( "Building " + project.getName() ); + + line(); + + MavenProjectExecutionRequest projectExecutionRequest = request.createProjectExecutionRequest( project ); + + try + { + MavenExecutionResponse response = handleProject( projectExecutionRequest ); + + if ( response.isExecutionFailure() ) + { + return response; + } + } + catch ( Exception e ) + { + throw new ReactorException( "Error executing project within the reactor", e ); + } + + } + + dispatcher.dispatchEnd( event, request.getBaseDirectory().getPath() ); + + // TODO: not really satisfactory + return null; + } + catch ( ReactorException e ) + { + dispatcher.dispatchError( event, request.getBaseDirectory().getPath(), e ); + + throw e; + } } public MavenProject getProject( File pom, ArtifactRepository localRepository ) @@ -232,7 +269,7 @@ public class DefaultMaven protected MavenSession createSession( MavenExecutionRequest request ) { - return new MavenSession( container, pluginManager, request.getLocalRepository(), request.getGoals() ); + return new MavenSession( container, pluginManager, request.getLocalRepository(), request.getEventDispatcher(), request.getLog(), request.getGoals() ); } /** diff --git a/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java b/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java index a701345f1e..5e2caeb9b6 100644 --- a/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java +++ b/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java @@ -33,8 +33,13 @@ import org.apache.maven.execution.MavenExecutionResponse; import org.apache.maven.execution.MavenInitializingExecutionRequest; import org.apache.maven.execution.MavenProjectExecutionRequest; import org.apache.maven.execution.MavenReactorExecutionRequest; +import org.apache.maven.monitor.event.DefaultEventDispatcher; +import org.apache.maven.monitor.event.DefaultEventMonitor; +import org.apache.maven.monitor.event.EventDispatcher; +import org.apache.maven.monitor.logging.DefaultLog; import org.codehaus.classworlds.ClassWorld; import org.codehaus.plexus.embed.ArtifactEnabledEmbedder; +import org.codehaus.plexus.logging.Logger; import java.io.File; import java.io.FileInputStream; @@ -108,6 +113,8 @@ public class MavenCli MavenExecutionRequest request = null; File projectFile = new File( userDir, POMv4 ); + + EventDispatcher eventDispatcher = new DefaultEventDispatcher(); if ( projectFile.exists() ) { @@ -118,6 +125,7 @@ public class MavenCli String excludes = System.getProperty( "maven.reactor.excludes", POMv4 ); request = new MavenReactorExecutionRequest( localRepository, + eventDispatcher, mavenProperties, commandLine.getArgList(), includes, @@ -127,6 +135,7 @@ public class MavenCli else { request = new MavenProjectExecutionRequest( localRepository, + eventDispatcher, mavenProperties, commandLine.getArgList(), projectFile ); @@ -134,7 +143,7 @@ public class MavenCli } else { - request = new MavenInitializingExecutionRequest( localRepository, mavenProperties, commandLine.getArgList() ); + request = new MavenInitializingExecutionRequest( localRepository, eventDispatcher, mavenProperties, commandLine.getArgList() ); } // ---------------------------------------------------------------------- @@ -145,7 +154,15 @@ public class MavenCli ArtifactEnabledEmbedder embedder = new ArtifactEnabledEmbedder(); embedder.start( classWorld ); - + + Logger logger = embedder.getContainer().getLogger(); + 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. WagonManager wagonManager = (WagonManager) embedder.lookup( WagonManager.ROLE ); diff --git a/maven-core/src/main/java/org/apache/maven/execution/AbstractMavenExecutionRequest.java b/maven-core/src/main/java/org/apache/maven/execution/AbstractMavenExecutionRequest.java index fad75ac1e7..eab0430925 100644 --- a/maven-core/src/main/java/org/apache/maven/execution/AbstractMavenExecutionRequest.java +++ b/maven-core/src/main/java/org/apache/maven/execution/AbstractMavenExecutionRequest.java @@ -18,7 +18,10 @@ package org.apache.maven.execution; */ import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.project.MavenProject; +import org.apache.maven.monitor.event.DefaultEventDispatcher; +import org.apache.maven.monitor.event.EventDispatcher; +import org.apache.maven.monitor.event.EventMonitor; +import org.apache.maven.monitor.logging.Log; import java.util.List; import java.util.Properties; @@ -41,13 +44,19 @@ implements MavenExecutionRequest protected MavenSession session; - public AbstractMavenExecutionRequest( ArtifactRepository localRepository, Properties parameters, List goals ) + private Log log; + + private EventDispatcher eventDispatcher; + + public AbstractMavenExecutionRequest( ArtifactRepository localRepository, EventDispatcher eventDispatcher, Properties parameters, List goals ) { this.localRepository = localRepository; this.parameters = parameters; this.goals = goals; + + this.eventDispatcher = eventDispatcher; } public ArtifactRepository getLocalRepository() @@ -83,4 +92,25 @@ implements MavenExecutionRequest { this.session = session; } + + public void setLog(Log log) + { + this.log = log; + } + + public Log getLog() + { + return log; + } + + public void addEventMonitor(EventMonitor monitor) + { + eventDispatcher.addEventMonitor(monitor); + } + + public EventDispatcher getEventDispatcher() + { + return eventDispatcher; + } + } diff --git a/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java b/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java index 795ba72750..3516ada668 100644 --- a/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java +++ b/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java @@ -18,6 +18,9 @@ package org.apache.maven.execution; */ import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.monitor.event.EventDispatcher; +import org.apache.maven.monitor.event.EventMonitor; +import org.apache.maven.monitor.logging.Log; import java.io.IOException; import java.util.List; @@ -41,4 +44,12 @@ public interface MavenExecutionRequest MavenSession getSession(); List getProjectFiles() throws IOException; + + void setLog( Log log ); + + Log getLog(); + + void addEventMonitor( EventMonitor monitor ); + + EventDispatcher getEventDispatcher(); } diff --git a/maven-core/src/main/java/org/apache/maven/execution/MavenInitializingExecutionRequest.java b/maven-core/src/main/java/org/apache/maven/execution/MavenInitializingExecutionRequest.java index 2e0d1523bb..557ea9db19 100644 --- a/maven-core/src/main/java/org/apache/maven/execution/MavenInitializingExecutionRequest.java +++ b/maven-core/src/main/java/org/apache/maven/execution/MavenInitializingExecutionRequest.java @@ -18,6 +18,7 @@ package org.apache.maven.execution; */ import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.monitor.event.EventDispatcher; import java.util.List; import java.util.Properties; @@ -29,9 +30,9 @@ import java.util.Properties; public class MavenInitializingExecutionRequest extends AbstractMavenExecutionRequest { - public MavenInitializingExecutionRequest( ArtifactRepository localRepository, Properties properties, List goals ) + public MavenInitializingExecutionRequest( ArtifactRepository localRepository, EventDispatcher eventDispatcher, Properties properties, List goals ) { - super( localRepository, properties, goals ); + super( localRepository, eventDispatcher, properties, goals ); type = "initializing"; } diff --git a/maven-core/src/main/java/org/apache/maven/execution/MavenProjectExecutionRequest.java b/maven-core/src/main/java/org/apache/maven/execution/MavenProjectExecutionRequest.java index 775c2b428c..97f442e380 100644 --- a/maven-core/src/main/java/org/apache/maven/execution/MavenProjectExecutionRequest.java +++ b/maven-core/src/main/java/org/apache/maven/execution/MavenProjectExecutionRequest.java @@ -18,6 +18,7 @@ package org.apache.maven.execution; */ import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.monitor.event.EventDispatcher; import java.io.File; import java.util.ArrayList; @@ -34,11 +35,12 @@ extends AbstractMavenExecutionRequest private File pom; public MavenProjectExecutionRequest( ArtifactRepository localRepository, + EventDispatcher eventDispatcher, Properties properties, List goals, File pom ) { - super( localRepository, properties, goals ); + super( localRepository, eventDispatcher, properties, goals ); this.pom = pom; diff --git a/maven-core/src/main/java/org/apache/maven/execution/MavenReactorExecutionRequest.java b/maven-core/src/main/java/org/apache/maven/execution/MavenReactorExecutionRequest.java index 8d502f5fb6..e2a57bcd47 100644 --- a/maven-core/src/main/java/org/apache/maven/execution/MavenReactorExecutionRequest.java +++ b/maven-core/src/main/java/org/apache/maven/execution/MavenReactorExecutionRequest.java @@ -18,6 +18,7 @@ package org.apache.maven.execution; */ import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.monitor.event.EventDispatcher; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.FileUtils; @@ -39,10 +40,11 @@ extends AbstractMavenExecutionRequest private File baseDirectory; - public MavenReactorExecutionRequest( ArtifactRepository localRepository, Properties properties, List goals, - String includes, String excludes, File baseDirectory ) + public MavenReactorExecutionRequest( ArtifactRepository localRepository, EventDispatcher eventDispatcher, + Properties properties, List goals, String includes, + String excludes, File baseDirectory ) { - super( localRepository, properties, goals ); + super( localRepository, eventDispatcher, properties, goals ); this.includes = includes; @@ -76,6 +78,6 @@ extends AbstractMavenExecutionRequest public MavenProjectExecutionRequest createProjectExecutionRequest( MavenProject project ) { - return new MavenProjectExecutionRequest( localRepository, parameters, goals, project.getFile() ); + return new MavenProjectExecutionRequest( localRepository, getEventDispatcher(), parameters, goals, project.getFile() ); } } diff --git a/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java b/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java index 8afd4d13df..e9669e47bf 100644 --- a/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java +++ b/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java @@ -20,6 +20,8 @@ package org.apache.maven.execution; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.model.PostGoal; import org.apache.maven.model.PreGoal; +import org.apache.maven.monitor.event.EventDispatcher; +import org.apache.maven.monitor.logging.Log; import org.apache.maven.plugin.PluginManager; import org.apache.maven.project.MavenProject; import org.apache.maven.repository.RepositoryUtils; @@ -61,9 +63,15 @@ public class MavenSession private Map postGoalMappings; + private EventDispatcher eventDispatcher; + + private Log log; + public MavenSession( PlexusContainer container, PluginManager pluginManager, ArtifactRepository localRepository, + EventDispatcher eventDispatcher, + Log log, List goals ) { this.container = container; @@ -72,6 +80,10 @@ public class MavenSession this.localRepository = localRepository; + this.eventDispatcher = eventDispatcher; + + this.log = log; + this.dag = new DAG(); this.goals = goals; @@ -158,6 +170,16 @@ public class MavenSession } } } + + public EventDispatcher getEventDispatcher() + { + return eventDispatcher; + } + + public Log getLog() + { + return log; + } //!! this should probably not be done here as there are request types that // have no project diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java index 4f3c30904c..d7055cebe1 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java @@ -24,6 +24,8 @@ import org.apache.maven.execution.MavenExecutionResponse; import org.apache.maven.execution.MavenSession; import org.apache.maven.lifecycle.goal.GoalExecutionException; import org.apache.maven.model.Plugin; +import org.apache.maven.monitor.event.EventDispatcher; +import org.apache.maven.monitor.event.MavenEvents; import org.apache.maven.plugin.PluginExecutionResponse; import org.apache.maven.plugin.PluginManager; import org.apache.maven.plugin.descriptor.MojoDescriptor; @@ -229,25 +231,44 @@ public class DefaultLifecycleExecutor // only execute up to the given phase int index = phases.indexOf( phaseMap.get( phase ) ); + EventDispatcher dispatcher = session.getEventDispatcher(); + for ( int j = 0; j <= index; j++ ) { Phase p = (Phase) phases.get( j ); + + String event = MavenEvents.PHASE_EXECUTION; - if ( p.getGoals() != null ) + // !! This is ripe for refactoring to an aspect. + // Event monitoring. + dispatcher.dispatchStart( event, p.getId() ); + try { - for ( Iterator i = p.getGoals().iterator(); i.hasNext(); ) + if ( p.getGoals() != null ) { - String goal = (String) i.next(); - - PluginExecutionResponse pluginResponse = executeMojo( goal, session ); - - if ( pluginResponse.isExecutionFailure() ) + for ( Iterator i = p.getGoals().iterator(); i.hasNext(); ) { - response.setExecutionFailure( goal, pluginResponse.getFailureResponse() ); - return; + String goal = (String) i.next(); + + PluginExecutionResponse pluginResponse = executeMojo( goal, session ); + + if ( pluginResponse.isExecutionFailure() ) + { + response.setExecutionFailure( goal, pluginResponse.getFailureResponse() ); + return; + } } } + + dispatcher.dispatchEnd( event, p.getId() ); } + catch ( LifecycleExecutionException e ) + { + dispatcher.dispatchError( event, p.getId(), e ); + + throw e; + } + // End event monitoring. } } diff --git a/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java b/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java new file mode 100644 index 0000000000..1cce550b66 --- /dev/null +++ b/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java @@ -0,0 +1,30 @@ +package org.apache.maven.monitor.event; + +import org.codehaus.plexus.logging.Logger; + +/** + * @author jdcasey + */ +public class DefaultEventMonitor + extends AbstractSelectiveEventMonitor +{ + + private static final String[] START_EVENTS = { + MavenEvents.MOJO_EXECUTION + }; + + private final Logger logger; + + public DefaultEventMonitor( Logger logger ) + { + super( START_EVENTS, MavenEvents.NO_EVENTS, MavenEvents.NO_EVENTS ); + + this.logger = logger; + } + + protected void doStartEvent( String event, String target, long time ) + { + logger.info( "[" + target + "]" ); + } + +} \ No newline at end of file diff --git a/maven-core/src/main/java/org/apache/maven/monitor/logging/DefaultLog.java b/maven-core/src/main/java/org/apache/maven/monitor/logging/DefaultLog.java new file mode 100644 index 0000000000..d94261c36b --- /dev/null +++ b/maven-core/src/main/java/org/apache/maven/monitor/logging/DefaultLog.java @@ -0,0 +1,79 @@ +package org.apache.maven.monitor.logging; + +import org.codehaus.plexus.logging.Logger; + +/** + * @author jdcasey + */ +public class DefaultLog + implements Log +{ + + private final Logger logger; + + public DefaultLog( Logger logger ) + { + this.logger = logger; + } + + public void debug( CharSequence content ) + { + logger.debug( content.toString() ); + } + + public void debug( CharSequence content, Throwable error ) + { + logger.debug( content.toString(), error ); + } + + public void debug( Throwable error ) + { + logger.debug( "", error ); + } + + public void info( CharSequence content ) + { + logger.info( content.toString() ); + } + + public void info( CharSequence content, Throwable error ) + { + logger.info( content.toString(), error ); + } + + public void info( Throwable error ) + { + logger.info( "", error ); + } + + public void warn( CharSequence content ) + { + logger.warn( content.toString() ); + } + + public void warn( CharSequence content, Throwable error ) + { + logger.warn( content.toString(), error ); + } + + public void warn( Throwable error ) + { + logger.warn( "", error ); + } + + public void error( CharSequence content ) + { + logger.error( content.toString() ); + } + + public void error( CharSequence content, Throwable error ) + { + logger.error( content.toString(), error ); + } + + public void error( Throwable error ) + { + logger.error( "", error ); + } + +} \ No newline at end of file diff --git a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java index ee7ec8fc0a..959e7b26df 100644 --- a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java +++ b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java @@ -29,6 +29,8 @@ import org.apache.maven.artifact.resolver.filter.ArtifactFilter; import org.apache.maven.artifact.resolver.filter.ExclusionSetFilter; import org.apache.maven.execution.MavenSession; import org.apache.maven.lifecycle.goal.GoalExecutionException; +import org.apache.maven.monitor.event.EventDispatcher; +import org.apache.maven.monitor.event.MavenEvents; import org.apache.maven.plugin.descriptor.MojoDescriptor; import org.apache.maven.plugin.descriptor.Parameter; import org.apache.maven.plugin.descriptor.PluginDescriptor; @@ -279,9 +281,11 @@ public class DefaultPluginManager try { - getLogger().info( "[" + mojoDescriptor.getId() + "]" ); +// getLogger().info( "[" + mojoDescriptor.getId() + "]" ); request = new PluginExecutionRequest( DefaultPluginManager.createParameters( mojoDescriptor, session ) ); + + request.setLog( session.getLog() ); } catch ( PluginConfigurationException e ) { @@ -295,8 +299,25 @@ public class DefaultPluginManager try { plugin = (Plugin) container.lookup( Plugin.ROLE, goalName ); + + // !! This is ripe for refactoring to an aspect. + // Event monitoring. + String event = MavenEvents.MOJO_EXECUTION; + EventDispatcher dispatcher = session.getEventDispatcher(); - plugin.execute( request, response ); + dispatcher.dispatchStart( event, goalName ); + try + { + plugin.execute( request, response ); + + dispatcher.dispatchEnd( event, goalName ); + } + catch(Exception e) + { + session.getEventDispatcher().dispatchError( event, goalName, e ); + throw e; + } + // End event monitoring. releaseComponents( mojoDescriptor, request ); @@ -455,7 +476,7 @@ public class DefaultPluginManager public void initialize() { artifactFilter = new ExclusionSetFilter( new String[]{"maven-core", "maven-artifact", "maven-model", - "maven-plugin", "plexus-container-api", + "maven-monitor", "maven-plugin", "plexus-container-api", "plexus-container-default", "plexus-artifact-container", "classworlds"} ); diff --git a/maven-core/src/test/java/org/apache/maven/MavenTestCase.java b/maven-core/src/test/java/org/apache/maven/MavenTestCase.java index d0f01e0919..61e2a0fb5c 100644 --- a/maven-core/src/test/java/org/apache/maven/MavenTestCase.java +++ b/maven-core/src/test/java/org/apache/maven/MavenTestCase.java @@ -22,6 +22,9 @@ import java.util.List; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.lifecycle.goal.MavenGoalExecutionContext; +import org.apache.maven.monitor.event.DefaultEventDispatcher; +import org.apache.maven.monitor.logging.DefaultLog; +import org.apache.maven.monitor.logging.Log; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.PluginManager; import org.apache.maven.project.MavenProject; @@ -130,7 +133,9 @@ public class MavenTestCase { List goals = new ArrayList(); - MavenSession session = new MavenSession( getContainer(), pluginManager, localRepository, goals ); + Log log = new DefaultLog(getContainer().getLogger()); + + MavenSession session = new MavenSession( getContainer(), pluginManager, localRepository, new DefaultEventDispatcher(), log, goals ); session.setProject( project ); diff --git a/maven-mboot2/src/main/java/MBoot.java b/maven-mboot2/src/main/java/MBoot.java index ae524780cb..0c34c146db 100644 --- a/maven-mboot2/src/main/java/MBoot.java +++ b/maven-mboot2/src/main/java/MBoot.java @@ -78,6 +78,7 @@ public class MBoot String[] builds = new String[] { "maven-model", + "maven-monitor", "maven-plugin", "maven-artifact", "maven-script/maven-script-marmalade", diff --git a/maven-monitor/pom.xml b/maven-monitor/pom.xml new file mode 100644 index 0000000000..01acbb0594 --- /dev/null +++ b/maven-monitor/pom.xml @@ -0,0 +1,11 @@ + + 4.0.0 + + maven + maven-component + 2.0-SNAPSHOT + + maven + maven-monitor + 2.0-SNAPSHOT + \ No newline at end of file diff --git a/maven-monitor/src/main/java/org/apache/maven/monitor/event/AbstractSelectiveEventMonitor.java b/maven-monitor/src/main/java/org/apache/maven/monitor/event/AbstractSelectiveEventMonitor.java new file mode 100644 index 0000000000..dda6bde5d3 --- /dev/null +++ b/maven-monitor/src/main/java/org/apache/maven/monitor/event/AbstractSelectiveEventMonitor.java @@ -0,0 +1,62 @@ +package org.apache.maven.monitor.event; + +import java.util.Arrays; +import java.util.List; + +/** + * @author jdcasey + */ +public abstract class AbstractSelectiveEventMonitor + implements EventMonitor +{ + + private List boundStartEvents; + private List boundErrorEvents; + private List boundEndEvents; + + protected AbstractSelectiveEventMonitor(String[] startEvents, String[] endEvents, String[] errorEvents) + { + this.boundStartEvents = Arrays.asList( startEvents ); + + this.boundEndEvents = Arrays.asList( endEvents ); + + this.boundErrorEvents = Arrays.asList( errorEvents ); + } + + public final void startEvent( String eventName, String target, long timestamp ) + { + if( boundStartEvents.contains( eventName ) ) + { + doStartEvent( eventName, target, timestamp ); + } + } + + protected void doStartEvent( String eventName, String target, long timestamp ) + { + } + + public final void endEvent( String eventName, String target, long timestamp ) + { + if( boundEndEvents.contains( eventName ) ) + { + doEndEvent( eventName, target, timestamp ); + } + } + + protected void doEndEvent( String eventName, String target, long timestamp ) + { + } + + public final void errorEvent( String eventName, String target, long timestamp, Throwable cause ) + { + if( boundErrorEvents.contains( eventName ) ) + { + doErrorEvent( eventName, target, timestamp, cause ); + } + } + + protected void doErrorEvent( String eventName, String target, long timestamp, Throwable cause ) + { + } + +} diff --git a/maven-monitor/src/main/java/org/apache/maven/monitor/event/DefaultEventDispatcher.java b/maven-monitor/src/main/java/org/apache/maven/monitor/event/DefaultEventDispatcher.java new file mode 100644 index 0000000000..a7df778af7 --- /dev/null +++ b/maven-monitor/src/main/java/org/apache/maven/monitor/event/DefaultEventDispatcher.java @@ -0,0 +1,48 @@ +package org.apache.maven.monitor.event; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * @author jdcasey + */ +public class DefaultEventDispatcher + implements EventDispatcher +{ + + private List eventMonitors = new ArrayList(); + + public void addEventMonitor( EventMonitor monitor ) + { + eventMonitors.add( monitor ); + } + + public void dispatchStart( String event, String target ) + { + for ( Iterator it = eventMonitors.iterator(); it.hasNext(); ) + { + EventMonitor monitor = (EventMonitor) it.next(); + monitor.startEvent( event, target, System.currentTimeMillis() ); + } + } + + public void dispatchEnd( String event, String target ) + { + for ( Iterator it = eventMonitors.iterator(); it.hasNext(); ) + { + EventMonitor monitor = (EventMonitor) it.next(); + monitor.endEvent( event, target, System.currentTimeMillis() ); + } + } + + public void dispatchError( String event, String target, Throwable cause ) + { + for ( Iterator it = eventMonitors.iterator(); it.hasNext(); ) + { + EventMonitor monitor = (EventMonitor) it.next(); + monitor.errorEvent( event, target, System.currentTimeMillis(), cause ); + } + } + +} \ No newline at end of file diff --git a/maven-monitor/src/main/java/org/apache/maven/monitor/event/EventDispatcher.java b/maven-monitor/src/main/java/org/apache/maven/monitor/event/EventDispatcher.java new file mode 100644 index 0000000000..d026e9df72 --- /dev/null +++ b/maven-monitor/src/main/java/org/apache/maven/monitor/event/EventDispatcher.java @@ -0,0 +1,17 @@ +package org.apache.maven.monitor.event; + +/** + * @author jdcasey + */ +public interface EventDispatcher +{ + + void addEventMonitor( EventMonitor monitor ); + + void dispatchStart( String event, String target ); + + void dispatchEnd( String event, String target ); + + void dispatchError( String event, String target, Throwable cause ); + +} \ No newline at end of file diff --git a/maven-monitor/src/main/java/org/apache/maven/monitor/event/EventMonitor.java b/maven-monitor/src/main/java/org/apache/maven/monitor/event/EventMonitor.java new file mode 100644 index 0000000000..ebe8743e35 --- /dev/null +++ b/maven-monitor/src/main/java/org/apache/maven/monitor/event/EventMonitor.java @@ -0,0 +1,15 @@ +package org.apache.maven.monitor.event; + +/** + * @author jdcasey + */ +public interface EventMonitor +{ + + void startEvent( String eventName, String target, long timestamp ); + + void endEvent( String eventName, String target, long timestamp ); + + void errorEvent( String eventName, String target, long timestamp, Throwable cause ); + +} \ No newline at end of file diff --git a/maven-monitor/src/main/java/org/apache/maven/monitor/event/MavenEvents.java b/maven-monitor/src/main/java/org/apache/maven/monitor/event/MavenEvents.java new file mode 100644 index 0000000000..d3deb5069a --- /dev/null +++ b/maven-monitor/src/main/java/org/apache/maven/monitor/event/MavenEvents.java @@ -0,0 +1,27 @@ +package org.apache.maven.monitor.event; + +/** + * @author jdcasey + */ +public final class MavenEvents +{ + + public static final String PHASE_EXECUTION = "phase-execute"; + public static final String MOJO_EXECUTION = "mojo-execute"; + public static final String PROJECT_EXECUTION = "project-execute"; + public static final String REACTOR_EXECUTION = "reactor-execute"; + + public static final String[] ALL_EVENTS = { + PHASE_EXECUTION, + MOJO_EXECUTION, + PROJECT_EXECUTION, + REACTOR_EXECUTION + }; + + public static final String[] NO_EVENTS = {}; + + private MavenEvents() + { + } + +} \ No newline at end of file diff --git a/maven-monitor/src/main/java/org/apache/maven/monitor/logging/Log.java b/maven-monitor/src/main/java/org/apache/maven/monitor/logging/Log.java new file mode 100644 index 0000000000..012c7f0798 --- /dev/null +++ b/maven-monitor/src/main/java/org/apache/maven/monitor/logging/Log.java @@ -0,0 +1,33 @@ +package org.apache.maven.monitor.logging; + +/** + * @author jdcasey + */ +public interface Log +{ + + void debug( CharSequence content ); + + void debug( CharSequence content, Throwable error ); + + void debug( Throwable error ); + + void info( CharSequence content ); + + void info( CharSequence content, Throwable error ); + + void info( Throwable error ); + + void warn( CharSequence content ); + + void warn( CharSequence content, Throwable error ); + + void warn( Throwable error ); + + void error( CharSequence content ); + + void error( CharSequence content, Throwable error ); + + void error( Throwable error ); + +} \ No newline at end of file diff --git a/maven-monitor/src/main/java/org/apache/maven/monitor/logging/SystemStreamLog.java b/maven-monitor/src/main/java/org/apache/maven/monitor/logging/SystemStreamLog.java new file mode 100644 index 0000000000..fc5b2e77e0 --- /dev/null +++ b/maven-monitor/src/main/java/org/apache/maven/monitor/logging/SystemStreamLog.java @@ -0,0 +1,108 @@ +package org.apache.maven.monitor.logging; + +import java.io.PrintWriter; +import java.io.StringWriter; + +/** + * @author jdcasey + */ +public class SystemStreamLog + implements Log +{ + + public void debug( CharSequence content ) + { + print( "debug", content ); + } + + public void debug( CharSequence content, Throwable error ) + { + print( "debug", content, error ); + } + + public void debug( Throwable error ) + { + print( "debug", error ); + } + + public void info( CharSequence content ) + { + print( "info", content ); + } + + public void info( CharSequence content, Throwable error ) + { + print( "info", content, error ); + } + + public void info( Throwable error ) + { + print( "info", error ); + } + + public void warn( CharSequence content ) + { + print( "warn", content ); + } + + public void warn( CharSequence content, Throwable error ) + { + print( "warn", content, error ); + } + + public void warn( Throwable error ) + { + print( "warn", error ); + } + + public void error( CharSequence content ) + { + System.err.println( "[error] " + content.toString() ); + } + + public void error( CharSequence content, Throwable error ) + { + StringWriter sWriter = new StringWriter(); + PrintWriter pWriter = new PrintWriter( sWriter ); + + error.printStackTrace( pWriter ); + + System.err.println( "[error] " + content.toString() + "\n\n" + sWriter.toString() ); + } + + public void error( Throwable error ) + { + StringWriter sWriter = new StringWriter(); + PrintWriter pWriter = new PrintWriter( sWriter ); + + error.printStackTrace( pWriter ); + + System.err.println( "[error] " + sWriter.toString() ); + } + + private void print( String prefix, CharSequence content ) + { + System.out.println( "[" + prefix + "] " + content.toString() ); + } + + private void print( String prefix, Throwable error ) + { + StringWriter sWriter = new StringWriter(); + PrintWriter pWriter = new PrintWriter( sWriter ); + + error.printStackTrace( pWriter ); + + System.out.println( "[" + prefix + "] " + sWriter.toString() ); + } + + private void print( String prefix, CharSequence content, Throwable error ) + { + StringWriter sWriter = new StringWriter(); + PrintWriter pWriter = new PrintWriter( sWriter ); + + error.printStackTrace( pWriter ); + + System.out.println( "[" + prefix + "] " + content.toString() + "\n\n" + sWriter.toString() ); + } + +} \ No newline at end of file diff --git a/maven-plugin-tools/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/extractor/AbstractScriptedMojoDescriptorExtractor.java b/maven-plugin-tools/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/extractor/AbstractScriptedMojoDescriptorExtractor.java index bb05b3daed..8273a9cf8a 100644 --- a/maven-plugin-tools/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/extractor/AbstractScriptedMojoDescriptorExtractor.java +++ b/maven-plugin-tools/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/extractor/AbstractScriptedMojoDescriptorExtractor.java @@ -23,17 +23,17 @@ public abstract class AbstractScriptedMojoDescriptorExtractor public Set execute( MavenProject project ) throws Exception { Build buildSection = project.getBuild(); - + List resources = null; - if(buildSection != null) + if ( buildSection != null ) { resources = buildSection.getResources(); } - - Map scriptFilesKeyedByBasedir = gatherScriptSourcesByBasedir(resources, getScriptFileExtension()); - - Set mojoDescriptors = extractMojoDescriptors(scriptFilesKeyedByBasedir); - + + Map scriptFilesKeyedByBasedir = gatherScriptSourcesByBasedir( resources, getScriptFileExtension() ); + + Set mojoDescriptors = extractMojoDescriptors( scriptFilesKeyedByBasedir ); + return mojoDescriptors; } @@ -44,60 +44,60 @@ public abstract class AbstractScriptedMojoDescriptorExtractor protected Map gatherScriptSourcesByBasedir( List resources, String scriptFileExtension ) { Map sourcesByBasedir = new TreeMap(); - - if(resources != null) + + if ( resources != null ) { for ( Iterator it = resources.iterator(); it.hasNext(); ) { Set sources = new HashSet(); - + Resource resource = (Resource) it.next(); - + String resourceDir = resource.getDirectory(); - File dir = new File(resourceDir); - - if(dir.exists()) + File dir = new File( resourceDir ); + + if ( dir.exists() ) { DirectoryScanner scanner = new DirectoryScanner(); - - scanner.setBasedir(dir); - + + scanner.setBasedir( dir ); + List includes = resource.getIncludes(); - - if(includes != null && !includes.isEmpty()) + + if ( includes != null && !includes.isEmpty() ) { - scanner.setIncludes((String[])includes.toArray(new String[includes.size()])); + scanner.setIncludes( (String[]) includes.toArray( new String[includes.size()] ) ); } - + List excludes = resource.getExcludes(); - - if(excludes != null && !excludes.isEmpty()) + + if ( excludes != null && !excludes.isEmpty() ) { - scanner.setExcludes((String[])excludes.toArray(new String[excludes.size()])); + scanner.setExcludes( (String[]) excludes.toArray( new String[excludes.size()] ) ); } - + scanner.addDefaultExcludes(); scanner.scan(); - + String[] relativePaths = scanner.getIncludedFiles(); - + for ( int i = 0; i < relativePaths.length; i++ ) { String relativePath = relativePaths[i]; - File scriptFile = new File(dir, relativePath); - - if(scriptFile.isFile() && relativePath.endsWith(scriptFileExtension)) + File scriptFile = new File( dir, relativePath ); + + if ( scriptFile.isFile() && relativePath.endsWith( scriptFileExtension ) ) { - sources.add(scriptFile); + sources.add( scriptFile ); } } - - sourcesByBasedir.put(resourceDir, sources); + + sourcesByBasedir.put( resourceDir, sources ); } } } - + return sourcesByBasedir; } -} +} \ No newline at end of file diff --git a/maven-plugin-tools/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginDescriptorGenerator.java b/maven-plugin-tools/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginDescriptorGenerator.java index 69236522b0..95d7c0e1d9 100644 --- a/maven-plugin-tools/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginDescriptorGenerator.java +++ b/maven-plugin-tools/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginDescriptorGenerator.java @@ -117,15 +117,15 @@ public class PluginDescriptorGenerator w.writeText( mojoDescriptor.getImplementation() ); w.endElement(); - + // ---------------------------------------------------------------------- // // ---------------------------------------------------------------------- w.startElement( "language" ); - + w.writeText( mojoDescriptor.getLanguage() ); - + w.endElement(); // ---------------------------------------------------------------------- diff --git a/maven-plugin-tools/maven-plugin-tools-java/src/main/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractor.java b/maven-plugin-tools/maven-plugin-tools-java/src/main/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractor.java index 523723b4d5..b69b36fe5f 100644 --- a/maven-plugin-tools/maven-plugin-tools-java/src/main/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractor.java +++ b/maven-plugin-tools/maven-plugin-tools-java/src/main/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractor.java @@ -248,11 +248,11 @@ public class JavaMojoDescriptorExtractor JavaDocBuilder builder = new JavaDocBuilder(); File basedir = project.getBasedir(); - - System.out.println("Project basedir: " + basedir); - + + System.out.println( "Project basedir: " + basedir ); + String sourceDir = null; - + Build buildSection = project.getBuild(); if ( buildSection != null ) { @@ -264,8 +264,8 @@ public class JavaMojoDescriptorExtractor File src = new File( basedir, "src/main/java" ); sourceDir = src.getPath(); } - - System.out.println("Source directory for java mojo extraction: " + sourceDir); + + System.out.println( "Source directory for java mojo extraction: " + sourceDir ); File sourceDirectoryFile = new File( sourceDir ); diff --git a/maven-plugin-tools/maven-plugin-tools-java/src/test/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractorTest.java b/maven-plugin-tools/maven-plugin-tools-java/src/test/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractorTest.java index b354dcdd6e..286a11f6c0 100644 --- a/maven-plugin-tools/maven-plugin-tools-java/src/test/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractorTest.java +++ b/maven-plugin-tools/maven-plugin-tools-java/src/test/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractorTest.java @@ -41,18 +41,18 @@ public class JavaMojoDescriptorExtractorTest System.out.println( "found source file: " + sourceFile ); File dir = sourceFile.getParentFile(); - + Model model = new Model(); model.setArtifactId( "maven-unitTesting-plugin" ); - + Build build = new Build(); - build.setSourceDirectory(new File(dir, "source").getPath()); - - model.setBuild(build); + build.setSourceDirectory( new File( dir, "source" ).getPath() ); + + model.setBuild( build ); MavenProject project = new MavenProject( model ); - - project.setFile(new File(dir, "pom.xml")); + + project.setFile( new File( dir, "pom.xml" ) ); Set results = extractor.execute( project ); assertEquals( 2, results.size() ); diff --git a/maven-plugin-tools/maven-plugin-tools-marmalade/pom.xml b/maven-plugin-tools/maven-plugin-tools-marmalade/pom.xml index ac8a1aeabb..bcdceaa0ab 100644 --- a/maven-plugin-tools/maven-plugin-tools-marmalade/pom.xml +++ b/maven-plugin-tools/maven-plugin-tools-marmalade/pom.xml @@ -12,6 +12,11 @@ Maven Plugin Tools for Marmalade 2.0-SNAPSHOT + + maven + maven-monitor + 2.0-SNAPSHOT + plexus plexus-container-default diff --git a/maven-plugin-tools/maven-plugin-tools-marmalade/src/main/java/org/apache/maven/tools/plugin/extractor/marmalade/MarmaladeMojoDescriptorExtractor.java b/maven-plugin-tools/maven-plugin-tools-marmalade/src/main/java/org/apache/maven/tools/plugin/extractor/marmalade/MarmaladeMojoDescriptorExtractor.java index c5d3a0fc9f..0164ccea63 100644 --- a/maven-plugin-tools/maven-plugin-tools-marmalade/src/main/java/org/apache/maven/tools/plugin/extractor/marmalade/MarmaladeMojoDescriptorExtractor.java +++ b/maven-plugin-tools/maven-plugin-tools-marmalade/src/main/java/org/apache/maven/tools/plugin/extractor/marmalade/MarmaladeMojoDescriptorExtractor.java @@ -44,7 +44,7 @@ import java.util.TreeMap; public class MarmaladeMojoDescriptorExtractor extends AbstractScriptedMojoDescriptorExtractor { - + protected String getScriptFileExtension() { return ".mmld"; @@ -55,42 +55,43 @@ public class MarmaladeMojoDescriptorExtractor ClassLoader oldCl = Thread.currentThread().getContextClassLoader(); try { - Thread.currentThread().setContextClassLoader(MarmaladeMojoDescriptorExtractor.class.getClassLoader()); - + Thread.currentThread().setContextClassLoader( MarmaladeMojoDescriptorExtractor.class.getClassLoader() ); + Set descriptors = new HashSet(); - + for ( Iterator mapIterator = sourceFilesKeyedByBasedir.entrySet().iterator(); mapIterator.hasNext(); ) { Map.Entry entry = (Map.Entry) mapIterator.next(); - - String basedir = (String)entry.getKey(); - Set scriptFiles = (Set)entry.getValue(); - + + String basedir = (String) entry.getKey(); + Set scriptFiles = (Set) entry.getValue(); + for ( Iterator it = scriptFiles.iterator(); it.hasNext(); ) { File scriptFile = (File) it.next(); - - MarmaladeScript script = parse(scriptFile); - + + MarmaladeScript script = parse( scriptFile ); + MarmaladeTag rootTag = script.getRoot(); - if(rootTag instanceof MojoTag) + if ( rootTag instanceof MojoTag ) { Map contextMap = new TreeMap(); contextMap.put( MarmaladeMojoExecutionDirectives.SCRIPT_BASEPATH_INVAR, basedir ); - - MarmaladeExecutionContext context = new DefaultContext(contextMap); - - script.execute(context); - + + MarmaladeExecutionContext context = new DefaultContext( contextMap ); + + script.execute( context ); + contextMap = context.getExternalizedVariables(); - + MojoDescriptor descriptor = (MojoDescriptor) contextMap.get( MarmaladeMojoExecutionDirectives.METADATA_OUTVAR ); - + descriptors.add( descriptor ); } else { - System.out.println("This script is not a mojo. Its root tag is {element: " + rootTag.getTagInfo().getElement() + ", class: " + rootTag.getClass().getName() + "}"); + System.out.println( "This script is not a mojo. Its root tag is {element: " + + rootTag.getTagInfo().getElement() + ", class: " + rootTag.getClass().getName() + "}" ); } } } @@ -99,40 +100,40 @@ public class MarmaladeMojoDescriptorExtractor } finally { - Thread.currentThread().setContextClassLoader(oldCl); + Thread.currentThread().setContextClassLoader( oldCl ); } } private MarmaladeScript parse( File scriptFile ) throws Exception { BufferedReader reader = null; - + try { - reader = new BufferedReader(new FileReader(scriptFile)); - + reader = new BufferedReader( new FileReader( scriptFile ) ); + MarmaladeParsingContext parsingContext = new DefaultParsingContext(); - - parsingContext.setInputLocation(scriptFile.getPath()); - parsingContext.setInput(reader); - + + parsingContext.setInputLocation( scriptFile.getPath() ); + parsingContext.setInput( reader ); + ScriptParser parser = new ScriptParser(); - - ScriptBuilder builder = parser.parse(parsingContext); - + + ScriptBuilder builder = parser.parse( parsingContext ); + MarmaladeScript script = builder.build(); - + return script; } finally { - if(reader != null) + if ( reader != null ) { try { reader.close(); } - catch(Exception e) + catch ( Exception e ) { } } diff --git a/maven-plugin-tools/maven-plugin-tools-marmalade/src/test/java/org/apache/maven/tools/plugin/extractor/marmalade/MarmaladeMojoDescriptorExtractorTest.java b/maven-plugin-tools/maven-plugin-tools-marmalade/src/test/java/org/apache/maven/tools/plugin/extractor/marmalade/MarmaladeMojoDescriptorExtractorTest.java index 03f9bb6c35..a3774fbc5e 100644 --- a/maven-plugin-tools/maven-plugin-tools-marmalade/src/test/java/org/apache/maven/tools/plugin/extractor/marmalade/MarmaladeMojoDescriptorExtractorTest.java +++ b/maven-plugin-tools/maven-plugin-tools-marmalade/src/test/java/org/apache/maven/tools/plugin/extractor/marmalade/MarmaladeMojoDescriptorExtractorTest.java @@ -41,21 +41,22 @@ public class MarmaladeMojoDescriptorExtractorTest Model model = new Model(); model.setArtifactId( "testArtifactId" ); - + Build build = new Build(); - + Resource resource = new Resource(); - resource.setDirectory(basedir.getPath()); - - build.addResource(resource); - - model.setBuild(build); + resource.setDirectory( basedir.getPath() ); + + build.addResource( resource ); + + model.setBuild( build ); MavenProject project = new MavenProject( model ); - - project.setFile(new File(basedir, "pom.xml")); - MarmaladeMojoDescriptorExtractor extractor = (MarmaladeMojoDescriptorExtractor) lookup(MojoDescriptorExtractor.ROLE, "marmalade"); + project.setFile( new File( basedir, "pom.xml" ) ); + + MarmaladeMojoDescriptorExtractor extractor = (MarmaladeMojoDescriptorExtractor) lookup( MojoDescriptorExtractor.ROLE, + "marmalade" ); Set descriptors = extractor.execute( project ); diff --git a/maven-plugin/pom.xml b/maven-plugin/pom.xml index 0dec2c9672..180ad94e6e 100644 --- a/maven-plugin/pom.xml +++ b/maven-plugin/pom.xml @@ -12,6 +12,11 @@ Maven Plugin 2.0-SNAPSHOT + + maven + maven-monitor + 2.0-SNAPSHOT + qdox qdox diff --git a/maven-plugin/src/main/java/org/apache/maven/plugin/PluginExecutionRequest.java b/maven-plugin/src/main/java/org/apache/maven/plugin/PluginExecutionRequest.java index bdc0442b63..8db71f44d5 100644 --- a/maven-plugin/src/main/java/org/apache/maven/plugin/PluginExecutionRequest.java +++ b/maven-plugin/src/main/java/org/apache/maven/plugin/PluginExecutionRequest.java @@ -16,6 +16,9 @@ package org.apache.maven.plugin; * limitations under the License. */ +import org.apache.maven.monitor.logging.Log; +import org.apache.maven.monitor.logging.SystemStreamLog; + import java.util.HashMap; import java.util.Map; @@ -29,6 +32,8 @@ public class PluginExecutionRequest private Map context; + private Log log; + public PluginExecutionRequest( Map parameters ) { context = new HashMap(); @@ -60,4 +65,22 @@ public class PluginExecutionRequest { return context.get( key ); } + + public void setLog( Log log ) + { + this.log = log; + } + + public Log getLog() + { + synchronized(this) + { + if(log == null) + { + log = new SystemStreamLog(); + } + } + + return log; + } } diff --git a/maven-plugins/maven-clean-plugin/pom.xml b/maven-plugins/maven-clean-plugin/pom.xml index 44d13806b8..25f6e0c70d 100644 --- a/maven-plugins/maven-clean-plugin/pom.xml +++ b/maven-plugins/maven-clean-plugin/pom.xml @@ -14,4 +14,11 @@ 1.0-SNAPSHOT 2001 org.apache.maven.plugin.clean + + + maven + maven-monitor + 2.0-SNAPSHOT + + diff --git a/maven-plugins/maven-clean-plugin/src/main/java/org/apache/maven/plugin/clean/CleanPlugin.java b/maven-plugins/maven-clean-plugin/src/main/java/org/apache/maven/plugin/clean/CleanPlugin.java index 7df04a72f0..36469507d6 100644 --- a/maven-plugins/maven-clean-plugin/src/main/java/org/apache/maven/plugin/clean/CleanPlugin.java +++ b/maven-plugins/maven-clean-plugin/src/main/java/org/apache/maven/plugin/clean/CleanPlugin.java @@ -16,6 +16,7 @@ package org.apache.maven.plugin.clean; * limitations under the License. */ +import org.apache.maven.monitor.logging.Log; import org.apache.maven.plugin.AbstractPlugin; import org.apache.maven.plugin.PluginExecutionRequest; import org.apache.maven.plugin.PluginExecutionResponse; @@ -47,23 +48,37 @@ public class CleanPlugin private boolean failOnError; + private Log log; + public void execute( PluginExecutionRequest request, PluginExecutionResponse response ) throws Exception { - outputDirectory = (String) request.getParameter( "outputDirectory" ); - - failOnError = Boolean.valueOf( (String) request.getParameter( "failedOnError" ) ).booleanValue(); - - if ( outputDirectory != null ) + try { - File dir = new File( outputDirectory ); + outputDirectory = (String) request.getParameter( "outputDirectory" ); - if ( dir.exists() && dir.isDirectory() ) + failOnError = Boolean.valueOf( (String) request.getParameter( "failedOnError" ) ).booleanValue(); + + log = request.getLog(); + + if ( outputDirectory != null ) { - log( "Deleting directory " + dir.getAbsolutePath() ); - removeDir( dir ); + File dir = new File( outputDirectory ); + + if ( dir.exists() && dir.isDirectory() ) + { + log( "Deleting directory " + dir.getAbsolutePath() ); + removeDir( dir ); + } } } + finally + { + // clean up state. + failOnError = false; + outputDirectory = null; + log = null; + } } /** @@ -148,6 +163,6 @@ public class CleanPlugin private void log( String message ) { - System.out.println( message ); + log.info( message ); } } diff --git a/maven-plugins/maven-compiler-plugin/pom.xml b/maven-plugins/maven-compiler-plugin/pom.xml index dd79741442..ac892e85b8 100644 --- a/maven-plugins/maven-compiler-plugin/pom.xml +++ b/maven-plugins/maven-compiler-plugin/pom.xml @@ -15,6 +15,11 @@ 2001 org.apache.maven + + maven + maven-monitor + 2.0-SNAPSHOT + plexus plexus diff --git a/maven-plugins/maven-compiler-plugin/src/main/java/org/apache/maven/plugin/CompilerMojo.java b/maven-plugins/maven-compiler-plugin/src/main/java/org/apache/maven/plugin/CompilerMojo.java index 5adf36d8a1..766ae69868 100644 --- a/maven-plugins/maven-compiler-plugin/src/main/java/org/apache/maven/plugin/CompilerMojo.java +++ b/maven-plugins/maven-compiler-plugin/src/main/java/org/apache/maven/plugin/CompilerMojo.java @@ -119,7 +119,8 @@ public class CompilerMojo message = "Warning! not present in repository!"; } - System.out.println( "classpathElements[ "+ i +" ] = " + classpathElements[i] + ": " + message ); +// System.out.println( "classpathElements[ "+ i +" ] = " + classpathElements[i] + ": " + message ); + request.getLog().debug( "classpathElements[ "+ i +" ] = " + classpathElements[i] + ": " + message ); } } diff --git a/maven-plugins/maven-war-plugin/pom.xml b/maven-plugins/maven-war-plugin/pom.xml index ac50ea0513..bea0eedeaa 100644 --- a/maven-plugins/maven-war-plugin/pom.xml +++ b/maven-plugins/maven-war-plugin/pom.xml @@ -14,6 +14,11 @@ 1.0-SNAPSHOT org.apache.maven.plugin.war + + maven + maven-monitor + 2.0-SNAPSHOT + maven maven-jar-plugin diff --git a/maven-plugins/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/ExplodedMojo.java b/maven-plugins/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/ExplodedMojo.java index ec50491c1f..6cff2489de 100644 --- a/maven-plugins/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/ExplodedMojo.java +++ b/maven-plugins/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/ExplodedMojo.java @@ -114,7 +114,7 @@ public class ExplodedMojo // ---------------------------------------------------------------------- // // ---------------------------------------------------------------------- -System.out.println("webapp"); + request.getLog().info("webapp"); } } \ No newline at end of file diff --git a/maven-plugins/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/WarMojo.java b/maven-plugins/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/WarMojo.java index 90d3e4d2c8..a671b572c7 100644 --- a/maven-plugins/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/WarMojo.java +++ b/maven-plugins/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/WarMojo.java @@ -114,7 +114,7 @@ public class WarMojo // ---------------------------------------------------------------------- // // ---------------------------------------------------------------------- -System.out.println("war"); + request.getLog().info("war"); } } diff --git a/maven-plugins/pom.xml b/maven-plugins/pom.xml index e5845c52d1..b0f8bc7096 100644 --- a/maven-plugins/pom.xml +++ b/maven-plugins/pom.xml @@ -45,6 +45,11 @@ + + maven + maven-monitor + 2.0-SNAPSHOT + maven maven-plugin diff --git a/maven-script/maven-script-marmalade/pom.xml b/maven-script/maven-script-marmalade/pom.xml index 6338e3ef66..da14f3afd6 100644 --- a/maven-script/maven-script-marmalade/pom.xml +++ b/maven-script/maven-script-marmalade/pom.xml @@ -12,6 +12,11 @@ Maven Marmalade Mojo Support 2.0-SNAPSHOT + + maven + maven-monitor + 2.0-SNAPSHOT + maven maven-plugin diff --git a/maven-script/maven-script-marmalade/src/main/java/org/apache/maven/script/marmalade/tags/ExecuteTag.java b/maven-script/maven-script-marmalade/src/main/java/org/apache/maven/script/marmalade/tags/ExecuteTag.java index e0fad6ac3c..a3a3e1c476 100644 --- a/maven-script/maven-script-marmalade/src/main/java/org/apache/maven/script/marmalade/tags/ExecuteTag.java +++ b/maven-script/maven-script-marmalade/src/main/java/org/apache/maven/script/marmalade/tags/ExecuteTag.java @@ -38,8 +38,7 @@ public class ExecuteTag for ( Iterator it = children().iterator(); it.hasNext(); ) { MarmaladeTag child = (MarmaladeTag) it.next(); - System.out.println("Will execute: " + child); } } - + } \ No newline at end of file diff --git a/maven-script/maven-script-marmalade/src/main/java/org/apache/maven/script/marmalade/tags/MetadataTag.java b/maven-script/maven-script-marmalade/src/main/java/org/apache/maven/script/marmalade/tags/MetadataTag.java index 7464916b4a..4bba3cb573 100644 --- a/maven-script/maven-script-marmalade/src/main/java/org/apache/maven/script/marmalade/tags/MetadataTag.java +++ b/maven-script/maven-script-marmalade/src/main/java/org/apache/maven/script/marmalade/tags/MetadataTag.java @@ -104,16 +104,16 @@ public class MetadataTag String basePath = (String) context.getVariable( MarmaladeMojoExecutionDirectives.SCRIPT_BASEPATH_INVAR, getExpressionEvaluator() ); - if(basePath != null) + if ( basePath != null ) { - if(basePath.endsWith("/")) + if ( basePath.endsWith( "/" ) ) { - basePath = basePath.substring(0, basePath.length()-2); + basePath = basePath.substring( 0, basePath.length() - 2 ); } - + String implementationPath = getTagInfo().getSourceFile().substring( basePath.length() ); - - implementationPath = implementationPath.replace('\\', '/'); + + implementationPath = implementationPath.replace( '\\', '/' ); descriptor.setImplementation( implementationPath ); } diff --git a/maven-script/maven-script-marmalade/src/main/java/org/apache/maven/script/marmalade/tags/MojoTag.java b/maven-script/maven-script-marmalade/src/main/java/org/apache/maven/script/marmalade/tags/MojoTag.java index 53d787ad8b..ccfb09dd92 100644 --- a/maven-script/maven-script-marmalade/src/main/java/org/apache/maven/script/marmalade/tags/MojoTag.java +++ b/maven-script/maven-script-marmalade/src/main/java/org/apache/maven/script/marmalade/tags/MojoTag.java @@ -40,37 +40,37 @@ public class MojoTag { return false; } - + protected void doExecute( MarmaladeExecutionContext context ) throws MarmaladeExecutionException { for ( Iterator it = children().iterator(); it.hasNext(); ) { MarmaladeTag child = (MarmaladeTag) it.next(); - if(!(child instanceof ExecuteTag)) + if ( !(child instanceof ExecuteTag) ) { - child.execute(context); + child.execute( context ); } } } - + public Object getComponent() { MarmaladeTag realRoot = null; for ( Iterator it = children().iterator(); it.hasNext(); ) { MarmaladeTag child = (MarmaladeTag) it.next(); - if(child instanceof ExecuteTag) + if ( child instanceof ExecuteTag ) { realRoot = child; break; } } - - if(realRoot == null) + + if ( realRoot == null ) { - throw new IllegalStateException("Mojo scripts MUST have a tag."); + throw new IllegalStateException( "Mojo scripts MUST have a tag." ); } - + MarmaladeScript script = new MarmaladeScript( getTagInfo().getSourceFile(), realRoot ); return new MarmaladeMojo( script ); } diff --git a/maven-script/maven-script-marmalade/src/test/java/org/apache/maven/script/marmalade/MarmaladeMojoTest.java b/maven-script/maven-script-marmalade/src/test/java/org/apache/maven/script/marmalade/MarmaladeMojoTest.java index b4f3e40cb5..3dbef227dd 100644 --- a/maven-script/maven-script-marmalade/src/test/java/org/apache/maven/script/marmalade/MarmaladeMojoTest.java +++ b/maven-script/maven-script-marmalade/src/test/java/org/apache/maven/script/marmalade/MarmaladeMojoTest.java @@ -51,15 +51,15 @@ public class MarmaladeMojoTest MarmaladeMojo mojo = new MarmaladeMojo( script ); PluginExecutionRequest request = new PluginExecutionRequest( Collections.EMPTY_MAP ); - request.setParameters(Collections.singletonMap("param", "paramValue")); - + request.setParameters( Collections.singletonMap( "param", "paramValue" ) ); + PluginExecutionResponse response = new PluginExecutionResponse(); mojo.execute( request, response ); Object result = request.getContextValue( "testvar" ); - - assertEquals("paramValue/testval", result); + + assertEquals( "paramValue/testval", result ); } } \ No newline at end of file diff --git a/maven-script/pom.xml b/maven-script/pom.xml index 1fede2ec06..716b58db22 100644 --- a/maven-script/pom.xml +++ b/maven-script/pom.xml @@ -12,6 +12,11 @@ Maven Script Support Root 2.0-SNAPSHOT + + maven + maven-monitor + 2.0-SNAPSHOT + maven maven-plugin