You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/08/17 13:28:25 UTC
svn commit: r804940 - in /maven/components/trunk:
maven-core/src/main/java/org/apache/maven/execution/
maven-core/src/main/java/org/apache/maven/lifecycle/
maven-embedder/src/main/java/org/apache/maven/cli/
Author: bentmann
Date: Mon Aug 17 11:28:24 2009
New Revision: 804940
URL: http://svn.apache.org/viewvc?rev=804940&view=rev
Log:
o Introduced listener to track lifecycle events
Added:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/AbstractLifecycleListener.java (with props)
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleEvent.java (with props)
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEvent.java (with props)
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEventCatapult.java (with props)
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleListener.java (with props)
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/LifecycleEventLogger.java (with props)
Modified:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java?rev=804940&r1=804939&r2=804940&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java Mon Aug 17 11:28:24 2009
@@ -23,6 +23,7 @@
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.RepositoryCache;
+import org.apache.maven.lifecycle.LifecycleListener;
import org.apache.maven.model.Profile;
import org.apache.maven.project.DefaultProjectBuildingRequest;
import org.apache.maven.project.ProjectBuildingRequest;
@@ -118,6 +119,8 @@
private List<ArtifactRepository> pluginArtifactRepositories;
+ private List<LifecycleListener> lifecycleListeners;
+
/**
* Suppress SNAPSHOT updates.
*
@@ -161,6 +164,7 @@
copy.setPluginArtifactRepositories( original.getPluginArtifactRepositories() );
copy.setRepositoryCache( original.getRepositoryCache() );
copy.setNoSnapshotUpdates( original.isNoSnapshotUpdates() );
+ copy.setLifecycleListeners( original.getLifecycleListeners() );
return original;
}
@@ -941,4 +945,28 @@
return this;
}
+ public List<LifecycleListener> getLifecycleListeners()
+ {
+ if ( lifecycleListeners == null )
+ {
+ lifecycleListeners = new ArrayList<LifecycleListener>();
+ }
+
+ return lifecycleListeners;
+ }
+
+ public MavenExecutionRequest setLifecycleListeners( List<LifecycleListener> lifecycleListeners )
+ {
+ if ( lifecycleListeners != null )
+ {
+ this.lifecycleListeners = new ArrayList<LifecycleListener>( lifecycleListeners );
+ }
+ else
+ {
+ this.lifecycleListeners = null;
+ }
+
+ return this;
+ }
+
}
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java?rev=804940&r1=804939&r2=804940&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java Mon Aug 17 11:28:24 2009
@@ -27,6 +27,7 @@
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
import org.apache.maven.artifact.repository.RepositoryCache;
+import org.apache.maven.lifecycle.LifecycleListener;
import org.apache.maven.model.Profile;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.settings.Settings;
@@ -263,5 +264,9 @@
File getUserToolchainsFile();
MavenExecutionRequest setUserToolchainsFile( File userToolchainsFile );
+ List<LifecycleListener> getLifecycleListeners();
+ MavenExecutionRequest setLifecycleListeners( List<LifecycleListener> lifecycleListeners );
+
ProjectBuildingRequest getProjectBuildingRequest();
+
}
Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/AbstractLifecycleListener.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/AbstractLifecycleListener.java?rev=804940&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/AbstractLifecycleListener.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/AbstractLifecycleListener.java Mon Aug 17 11:28:24 2009
@@ -0,0 +1,96 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Provides a skeleton implementation for lifecycle listeners. The methods of this class are empty.
+ *
+ * @author Benjamin Bentmann
+ */
+public class AbstractLifecycleListener
+ implements LifecycleListener
+{
+
+ public void sessionStarted( LifecycleEvent event )
+ {
+ // default does nothing
+ }
+
+ public void sessionEnded( LifecycleEvent event )
+ {
+ // default does nothing
+ }
+
+ public void projectSkipped( LifecycleEvent event )
+ {
+ // default does nothing
+ }
+
+ public void projectStarted( LifecycleEvent event )
+ {
+ // default does nothing
+ }
+
+ public void projectSucceeded( LifecycleEvent event )
+ {
+ // default does nothing
+ }
+
+ public void projectFailed( LifecycleEvent event )
+ {
+ // default does nothing
+ }
+
+ public void forkStarted( LifecycleEvent event )
+ {
+ // default does nothing
+ }
+
+ public void forkSucceeded( LifecycleEvent event )
+ {
+ // default does nothing
+ }
+
+ public void forkFailed( LifecycleEvent event )
+ {
+ // default does nothing
+ }
+
+ public void mojoSkipped( LifecycleEvent event )
+ {
+ // default does nothing
+ }
+
+ public void mojoStarted( LifecycleEvent event )
+ {
+ // default does nothing
+ }
+
+ public void mojoSucceeded( LifecycleEvent event )
+ {
+ // default does nothing
+ }
+
+ public void mojoFailed( LifecycleEvent event )
+ {
+ // default does nothing
+ }
+
+}
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/AbstractLifecycleListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/AbstractLifecycleListener.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleEvent.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleEvent.java?rev=804940&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleEvent.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleEvent.java Mon Aug 17 11:28:24 2009
@@ -0,0 +1,60 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Holds data relevant for a lifecycle event.
+ *
+ * @author Benjamin Bentmann
+ */
+class DefaultLifecycleEvent
+ implements LifecycleEvent
+{
+
+ private final MavenSession session;
+
+ private final MojoExecution mojoExecution;
+
+ public DefaultLifecycleEvent( MavenSession session, MojoExecution mojoExecution )
+ {
+ this.session = session;
+ this.mojoExecution = mojoExecution;
+ }
+
+ public MavenSession getSession()
+ {
+ return session;
+ }
+
+ public MavenProject getProject()
+ {
+ return session.getCurrentProject();
+ }
+
+ public MojoExecution getMojoExecution()
+ {
+ return mojoExecution;
+ }
+
+}
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleEvent.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleEvent.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=804940&r1=804939&r2=804940&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java Mon Aug 17 11:28:24 2009
@@ -1,4 +1,4 @@
- package org.apache.maven.lifecycle;
+package org.apache.maven.lifecycle;
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
@@ -122,10 +122,26 @@
*/
@Requirement
private Map<String, LifecycleMapping> lifecycleMappings;
-
+
+ private void fireEvent( MavenSession session, MojoExecution mojoExecution, LifecycleEventCatapult catapult )
+ {
+ List<LifecycleListener> listeners = session.getRequest().getLifecycleListeners();
+
+ if ( !listeners.isEmpty() )
+ {
+ LifecycleEvent event = new DefaultLifecycleEvent( session, mojoExecution );
+
+ for ( LifecycleListener listener : listeners )
+ {
+ catapult.fire( listener, event );
+ }
+ }
+ }
+
public void execute( MavenSession session )
{
// TODO: Use a listener here instead of loggers
+ fireEvent( session, null, LifecycleEventCatapult.SESSION_STARTED );
logger.info( "Build Order:" );
@@ -160,22 +176,26 @@
for ( MavenProject currentProject : session.getProjects() )
{
- if ( session.isBlackListed( currentProject ) )
- {
- logger.info( "Skipping " + currentProject.getName() );
- logger.info( "This project has been banned from the build due to previous failures." );
-
- continue;
- }
-
- logger.info( "Building " + currentProject.getName() );
-
long buildStartTime = System.currentTimeMillis();
try
{
session.setCurrentProject( currentProject );
+ if ( session.isBlackListed( currentProject ) )
+ {
+ fireEvent( session, null, LifecycleEventCatapult.PROJECT_SKIPPED );
+
+ logger.info( "Skipping " + currentProject.getName() );
+ logger.info( "This project has been banned from the build due to previous failures." );
+
+ continue;
+ }
+
+ fireEvent( session, null, LifecycleEventCatapult.PROJECT_STARTED );
+
+ logger.info( "Building " + currentProject.getName() );
+
repositoryRequest.setRemoteRepositories( currentProject.getPluginArtifactRepositories() );
populateDefaultConfigurationForPlugins( currentProject.getBuild().getPlugins(), repositoryRequest );
@@ -219,6 +239,8 @@
long buildEndTime = System.currentTimeMillis();
result.addBuildSummary( new BuildSuccess( currentProject, buildEndTime - buildStartTime ) );
+
+ fireEvent( session, null, LifecycleEventCatapult.PROJECT_SUCCEEDED );
}
catch ( Exception e )
{
@@ -228,6 +250,8 @@
result.addBuildSummary( new BuildFailure( currentProject, buildEndTime - buildStartTime, e ) );
+ fireEvent( session, null, LifecycleEventCatapult.PROJECT_FAILED );
+
if ( MavenExecutionRequest.REACTOR_FAIL_NEVER.equals( session.getReactorFailureBehavior() ) )
{
// continue the build
@@ -254,8 +278,10 @@
Thread.currentThread().setContextClassLoader( oldContextClassLoader );
}
- }
- }
+ }
+
+ fireEvent( session, null, LifecycleEventCatapult.SESSION_ENDED );
+ }
private void execute( MavenProject project, MavenSession session, MojoExecution mojoExecution )
throws MojoFailureException, MojoExecutionException, PluginConfigurationException, PluginManagerException
@@ -271,6 +297,8 @@
}
else
{
+ fireEvent( session, mojoExecution, LifecycleEventCatapult.MOJO_SKIPPED );
+
logger.warn( "Goal " + mojoDescriptor.getGoal()
+ " requires online mode for execution but Maven is currently offline, skipping" );
return;
@@ -283,37 +311,99 @@
if ( !forkedExecutions.isEmpty() )
{
- if ( logger.isDebugEnabled() )
- {
- logger.debug( "Forking execution for " + mojoDescriptor.getId() );
- }
-
- executionProject = project.clone();
+ fireEvent( session, mojoExecution, LifecycleEventCatapult.FORK_STARTED );
- session.setCurrentProject( executionProject );
try
{
- for ( MojoExecution forkedExecution : forkedExecutions )
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Forking execution for " + mojoDescriptor.getId() );
+ }
+
+ executionProject = project.clone();
+
+ session.setCurrentProject( executionProject );
+ try
+ {
+ for ( MojoExecution forkedExecution : forkedExecutions )
+ {
+ execute( executionProject, session, forkedExecution );
+ }
+ }
+ finally
{
- execute( executionProject, session, forkedExecution );
+ session.setCurrentProject( project );
+ }
+
+ fireEvent( session, mojoExecution, LifecycleEventCatapult.FORK_SUCCEEDED );
+
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Completed forked execution for " + mojoDescriptor.getId() );
}
}
- finally
+ catch ( MojoFailureException e )
{
- session.setCurrentProject( project );
+ fireEvent( session, mojoExecution, LifecycleEventCatapult.FORK_FAILED );
+
+ throw e;
}
+ catch ( MojoExecutionException e )
+ {
+ fireEvent( session, mojoExecution, LifecycleEventCatapult.FORK_FAILED );
+
+ throw e;
+ }
+ catch ( PluginConfigurationException e )
+ {
+ fireEvent( session, mojoExecution, LifecycleEventCatapult.FORK_FAILED );
- if ( logger.isDebugEnabled() )
+ throw e;
+ }
+ catch ( PluginManagerException e )
{
- logger.debug( "Completed forked execution for " + mojoDescriptor.getId() );
+ fireEvent( session, mojoExecution, LifecycleEventCatapult.FORK_FAILED );
+
+ throw e;
}
}
- project.setExecutionProject( executionProject );
+ fireEvent( session, mojoExecution, LifecycleEventCatapult.MOJO_STARTED );
+
+ try
+ {
+ project.setExecutionProject( executionProject );
+
+ logger.info( executionDescription( mojoExecution, project ) );
- logger.info( executionDescription( mojoExecution, project ) );
+ pluginManager.executeMojo( session, mojoExecution );
- pluginManager.executeMojo( session, mojoExecution );
+ fireEvent( session, mojoExecution, LifecycleEventCatapult.MOJO_SUCCEEDED );
+ }
+ catch ( MojoFailureException e )
+ {
+ fireEvent( session, mojoExecution, LifecycleEventCatapult.MOJO_FAILED );
+
+ throw e;
+ }
+ catch ( MojoExecutionException e )
+ {
+ fireEvent( session, mojoExecution, LifecycleEventCatapult.MOJO_FAILED );
+
+ throw e;
+ }
+ catch ( PluginConfigurationException e )
+ {
+ fireEvent( session, mojoExecution, LifecycleEventCatapult.MOJO_FAILED );
+
+ throw e;
+ }
+ catch ( PluginManagerException e )
+ {
+ fireEvent( session, mojoExecution, LifecycleEventCatapult.MOJO_FAILED );
+
+ throw e;
+ }
}
public MavenExecutionPlan calculateExecutionPlan( MavenSession session, String... tasks )
@@ -377,7 +467,8 @@
}
return new MavenExecutionPlan( lifecyclePlan, requiredDependencyResolutionScopes );
- }
+ }
+
private RepositoryRequest getRepositoryRequest( MavenSession session, MavenProject project )
{
RepositoryRequest request = new DefaultRepositoryRequest();
@@ -1074,7 +1165,7 @@
lifecycleMap.put( lifecycle.getId(), lifecycle );
}
- }
+ }
// These methods deal with construction intact Plugin object that look like they come from a standard
// <plugin/> block in a Maven POM. We have to do some wiggling to pull the sources of information
@@ -1125,11 +1216,11 @@
{
parseLifecyclePhaseDefinitions( plugins, null, goals );
}
- }
+ }
}
return plugins.keySet();
- }
+ }
private void parseLifecyclePhaseDefinitions( Map<Plugin, Plugin> plugins, String phase, String goals )
{
@@ -1198,7 +1289,7 @@
{
populateDefaultConfigurationForPlugin( plugin, repositoryRequest );
}
- }
+ }
private Xpp3Dom getDefaultPluginConfiguration( Plugin plugin, String goal, RepositoryRequest repositoryRequest )
throws LifecycleExecutionException
@@ -1232,7 +1323,7 @@
catch ( InvalidPluginDescriptorException e )
{
throw new LifecycleExecutionException( "Error getting default plugin information for " + plugin.getId(), e );
- }
+ }
return getMojoConfiguration( mojoDescriptor );
}
@@ -1335,7 +1426,7 @@
if ( plugin != null )
{
return plugin;
- }
+ }
}
}
@@ -1362,7 +1453,7 @@
if ( plugin != null )
{
return plugin;
- }
+ }
}
catch ( TransferFailedException e )
{
@@ -1374,10 +1465,10 @@
}
}
- }
+ }
throw new NoPluginFoundForPrefixException( prefix, session.getLocalRepository(), session.getCurrentProject().getPluginArtifactRepositories() );
- }
+ }
// Keep track of the repository that provided the prefix mapping
//
@@ -1526,7 +1617,7 @@
}
}
}
- }
+ }
private void checkRequiredParameters( MojoDescriptor goal, PlexusConfiguration configuration, ExpressionEvaluator expressionEvaluator )
throws PluginConfigurationException
@@ -1646,7 +1737,7 @@
}
}
}
- }
+ }
*/
}
Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEvent.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEvent.java?rev=804940&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEvent.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEvent.java Mon Aug 17 11:28:24 2009
@@ -0,0 +1,55 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Holds data relevant for a lifecycle event.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface LifecycleEvent
+{
+
+ /**
+ * Gets the session from which this event originates.
+ *
+ * @return The current session, never {@code null}.
+ */
+ MavenSession getSession();
+
+ /**
+ * Gets the current project (if any).
+ *
+ * @return The current project or {@code null} if not applicable.
+ */
+ MavenProject getProject();
+
+ /**
+ * Gets the current mojo execution (if any).
+ *
+ * @return The current mojo execution or {@code null} if not applicable.
+ */
+ MojoExecution getMojoExecution();
+
+}
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEvent.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEvent.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEventCatapult.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEventCatapult.java?rev=804940&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEventCatapult.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEventCatapult.java Mon Aug 17 11:28:24 2009
@@ -0,0 +1,143 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Assists in firing events from a generic method by abstracting from the actual callback method to be called on the
+ * listener.
+ *
+ * @author Benjamin Bentmann
+ */
+interface LifecycleEventCatapult
+{
+
+ /**
+ * Notifies the specified listener of the given event.
+ *
+ * @param listener The listener to notify, must not be {@code null}.
+ * @param event The event to fire, must not be {@code null}.
+ */
+ void fire( LifecycleListener listener, LifecycleEvent event );
+
+ static final LifecycleEventCatapult SESSION_STARTED = new LifecycleEventCatapult()
+ {
+ public void fire( LifecycleListener listener, LifecycleEvent event )
+ {
+ listener.sessionStarted( event );
+ }
+ };
+
+ static final LifecycleEventCatapult SESSION_ENDED = new LifecycleEventCatapult()
+ {
+ public void fire( LifecycleListener listener, LifecycleEvent event )
+ {
+ listener.sessionEnded( event );
+ }
+ };
+
+ static final LifecycleEventCatapult PROJECT_SKIPPED = new LifecycleEventCatapult()
+ {
+ public void fire( LifecycleListener listener, LifecycleEvent event )
+ {
+ listener.projectSkipped( event );
+ }
+ };
+
+ static final LifecycleEventCatapult PROJECT_STARTED = new LifecycleEventCatapult()
+ {
+ public void fire( LifecycleListener listener, LifecycleEvent event )
+ {
+ listener.projectStarted( event );
+ }
+ };
+
+ static final LifecycleEventCatapult PROJECT_SUCCEEDED = new LifecycleEventCatapult()
+ {
+ public void fire( LifecycleListener listener, LifecycleEvent event )
+ {
+ listener.projectSucceeded( event );
+ }
+ };
+
+ static final LifecycleEventCatapult PROJECT_FAILED = new LifecycleEventCatapult()
+ {
+ public void fire( LifecycleListener listener, LifecycleEvent event )
+ {
+ listener.projectFailed( event );
+ }
+ };
+
+ static final LifecycleEventCatapult MOJO_SKIPPED = new LifecycleEventCatapult()
+ {
+ public void fire( LifecycleListener listener, LifecycleEvent event )
+ {
+ listener.mojoSkipped( event );
+ }
+ };
+
+ static final LifecycleEventCatapult MOJO_STARTED = new LifecycleEventCatapult()
+ {
+ public void fire( LifecycleListener listener, LifecycleEvent event )
+ {
+ listener.mojoStarted( event );
+ }
+ };
+
+ static final LifecycleEventCatapult MOJO_SUCCEEDED = new LifecycleEventCatapult()
+ {
+ public void fire( LifecycleListener listener, LifecycleEvent event )
+ {
+ listener.mojoSucceeded( event );
+ }
+ };
+
+ static final LifecycleEventCatapult MOJO_FAILED = new LifecycleEventCatapult()
+ {
+ public void fire( LifecycleListener listener, LifecycleEvent event )
+ {
+ listener.mojoFailed( event );
+ }
+ };
+
+ static final LifecycleEventCatapult FORK_STARTED = new LifecycleEventCatapult()
+ {
+ public void fire( LifecycleListener listener, LifecycleEvent event )
+ {
+ listener.forkStarted( event );
+ }
+ };
+
+ static final LifecycleEventCatapult FORK_SUCCEEDED = new LifecycleEventCatapult()
+ {
+ public void fire( LifecycleListener listener, LifecycleEvent event )
+ {
+ listener.forkSucceeded( event );
+ }
+ };
+
+ static final LifecycleEventCatapult FORK_FAILED = new LifecycleEventCatapult()
+ {
+ public void fire( LifecycleListener listener, LifecycleEvent event )
+ {
+ listener.forkFailed( event );
+ }
+ };
+
+}
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEventCatapult.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEventCatapult.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleListener.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleListener.java?rev=804940&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleListener.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleListener.java Mon Aug 17 11:28:24 2009
@@ -0,0 +1,56 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Defines events that the lifecycle executor fires during a session.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface LifecycleListener
+{
+
+ void sessionStarted( LifecycleEvent event );
+
+ void sessionEnded( LifecycleEvent event );
+
+ void projectSkipped( LifecycleEvent event );
+
+ void projectStarted( LifecycleEvent event );
+
+ void projectSucceeded( LifecycleEvent event );
+
+ void projectFailed( LifecycleEvent event );
+
+ void mojoSkipped( LifecycleEvent event );
+
+ void mojoStarted( LifecycleEvent event );
+
+ void mojoSucceeded( LifecycleEvent event );
+
+ void mojoFailed( LifecycleEvent event );
+
+ void forkStarted( LifecycleEvent event );
+
+ void forkSucceeded( LifecycleEvent event );
+
+ void forkFailed( LifecycleEvent event );
+
+}
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleListener.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/LifecycleEventLogger.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/LifecycleEventLogger.java?rev=804940&view=auto
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/LifecycleEventLogger.java (added)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/LifecycleEventLogger.java Mon Aug 17 11:28:24 2009
@@ -0,0 +1,48 @@
+package org.apache.maven.cli;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.embedder.MavenEmbedderLogger;
+import org.apache.maven.lifecycle.AbstractLifecycleListener;
+
+/**
+ * Logs lifecycle events to a user-supplied logger.
+ *
+ * @author Benjamin Bentmann
+ */
+class LifecycleEventLogger
+ extends AbstractLifecycleListener
+{
+
+ private final MavenEmbedderLogger logger;
+
+ public LifecycleEventLogger( MavenEmbedderLogger logger )
+ {
+ if ( logger == null )
+ {
+ throw new IllegalArgumentException( "logger missing" );
+ }
+
+ this.logger = logger;
+ }
+
+ // TODO: log the events
+
+}
Propchange: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/LifecycleEventLogger.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/LifecycleEventLogger.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java?rev=804940&r1=804939&r2=804940&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java (original)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java Mon Aug 17 11:28:24 2009
@@ -16,6 +16,7 @@
*/
import java.io.File;
+import java.util.Arrays;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.ParseException;
@@ -30,6 +31,7 @@
import org.apache.maven.exception.ExceptionSummary;
import org.apache.maven.execution.MavenExecutionRequest;
import org.apache.maven.execution.MavenExecutionResult;
+import org.apache.maven.lifecycle.LifecycleListener;
import org.codehaus.plexus.classworlds.ClassWorld;
import org.sonatype.plexus.components.cipher.DefaultPlexusCipher;
import org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher;
@@ -120,6 +122,8 @@
MavenEmbedderLogger logger = configuration.getMavenEmbedderLogger();
+ request.setLifecycleListeners( Arrays.<LifecycleListener> asList( new LifecycleEventLogger( logger ) ) );
+
if ( debug || commandLine.hasOption( CLIManager.SHOW_VERSION ) )
{
CLIReportingUtils.showVersion();