提交 45f5cf21 编写于 作者: O Olivier Lamy

add support for maven spy for maven 3.1.0 only

上级 c4e7b58a
......@@ -31,6 +31,7 @@ import hudson.remoting.Channel;
import hudson.remoting.DelegatingCallable;
import hudson.util.IOException2;
import org.apache.maven.cli.event.ExecutionEventLogger;
import org.apache.maven.eventspy.EventSpy;
import org.apache.maven.execution.AbstractExecutionListener;
import org.apache.maven.execution.ExecutionEvent;
import org.apache.maven.execution.ExecutionListener;
......@@ -47,6 +48,7 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.NumberFormat;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -73,35 +75,49 @@ public class Maven3Builder extends AbstractMavenBuilder implements DelegatingCal
HudsonMavenExecutionResult mavenExecutionResult;
Class<?> maven3MainClass;
Class<?> maven3LauncherClass;
protected Maven3Builder(BuildListener listener,Map<ModuleName,ProxyImpl2> proxies, Collection<MavenModule> modules,
List<String> goals, Map<String, String> systemProps, MavenBuildInformation mavenBuildInformation,
Class<?> maven3MainClass, Class<?> maven3LauncherClass) {
super( listener, modules, goals, systemProps );
this.sourceProxies.putAll(proxies);
boolean supportEventSpy = false;
protected Maven3Builder(Maven3BuilderRequest maven3BuilderRequest) {
super( maven3BuilderRequest.listener, maven3BuilderRequest.modules, maven3BuilderRequest.goals, maven3BuilderRequest.systemProps );
this.sourceProxies.putAll(maven3BuilderRequest.proxies);
this.proxies = new HashMap<ModuleName, FilterImpl>();
for (Entry<ModuleName,ProxyImpl2> e : this.sourceProxies.entrySet()) {
this.proxies.put(e.getKey(), new FilterImpl(e.getValue(), mavenBuildInformation));
this.proxies.put(e.getKey(), new FilterImpl(e.getValue(), maven3BuilderRequest.mavenBuildInformation));
}
this.maven3MainClass = maven3MainClass;
this.maven3LauncherClass = maven3LauncherClass;
}
this.maven3LauncherClass = maven3BuilderRequest.maven3LauncherClass;
this.maven3MainClass = maven3BuilderRequest.maven3MainClass;
this.supportEventSpy = maven3BuilderRequest.supportEventSpy;
}
protected static class Maven3BuilderRequest {
BuildListener listener;
Map<ModuleName,ProxyImpl2> proxies;
Collection<MavenModule> modules;
List<String> goals;
Map<String, String> systemProps;
MavenBuildInformation mavenBuildInformation;
Class<?> maven3MainClass;
Class<?> maven3LauncherClass;
boolean supportEventSpy = false;
}
public Result call() throws IOException {
try {
initializeAsynchronousExecutions();
MavenExecutionListener mavenExecutionListener = new MavenExecutionListener( this );
Method setMavenExecutionListenerMethod = maven3LauncherClass.getMethod( "setMavenExecutionListener", ExecutionListener.class );
MavenExecutionListener mavenExecutionListener = supportEventSpy ? new JenkinsEventSpy(this) : new MavenExecutionListener( this );
if (supportEventSpy)
{
Method setEventSpiesMethod = maven3LauncherClass.getMethod( "setEventSpies", List.class );
setEventSpiesMethod.invoke( null, Collections.singletonList(mavenExecutionListener) );
setMavenExecutionListenerMethod.invoke( null, mavenExecutionListener );
} else {
Method setMavenExecutionListenerMethod = maven3LauncherClass.getMethod( "setMavenExecutionListener", ExecutionListener.class );
//Maven3Launcher.setMavenExecutionListener( mavenExecutionListener );
setMavenExecutionListenerMethod.invoke( null, mavenExecutionListener );
}
markAsSuccess = false;
registerSystemProperties();
......@@ -187,7 +203,96 @@ public class Maven3Builder extends AbstractMavenBuilder implements DelegatingCal
}
}
private static final class MavenExecutionListener extends AbstractExecutionListener implements Serializable, ExecutionListener {
private static final class JenkinsEventSpy extends MavenExecutionListener implements EventSpy,Serializable{
private static final long serialVersionUID = 4942789836756366117L;
public JenkinsEventSpy(AbstractMavenBuilder maven3Builder) {
super(maven3Builder);
}
@Override
public void init( Context context )
throws Exception
{
//no op
}
@Override
public void onEvent( Object event )
throws Exception
{
if (event instanceof ExecutionEvent){
ExecutionEvent.Type eventType = ( (ExecutionEvent) event ).getType();
switch ( eventType )
{
case ProjectDiscoveryStarted:
super.projectDiscoveryStarted( (ExecutionEvent) event );
break;
case SessionStarted:
super.sessionStarted( (ExecutionEvent) event );
break;
case SessionEnded:
super.sessionEnded( (ExecutionEvent) event );
break;
case ProjectSkipped:
super.projectSkipped( (ExecutionEvent) event );
break;
case ProjectStarted:
super.projectStarted( (ExecutionEvent) event );
break;
case ProjectSucceeded:
super.projectSucceeded( (ExecutionEvent) event );
break;
case ProjectFailed:
super.projectFailed( (ExecutionEvent) event );
break;
case MojoSkipped:
super.mojoSkipped( (ExecutionEvent) event );
break;
case MojoStarted:
super.mojoStarted( (ExecutionEvent) event );
break;
case MojoSucceeded:
super.mojoSucceeded( (ExecutionEvent) event );
break;
case MojoFailed:
super.mojoFailed( (ExecutionEvent) event );
break;
case ForkStarted:
super.forkedProjectStarted( (ExecutionEvent) event );
break;
case ForkSucceeded:
super.forkSucceeded( (ExecutionEvent) event );
break;
case ForkFailed:
super.forkFailed( (ExecutionEvent) event );
break;
case ForkedProjectStarted:
super.forkedProjectStarted( (ExecutionEvent) event );
break;
case ForkedProjectSucceeded:
super.forkedProjectSucceeded( (ExecutionEvent) event );
break;
case ForkedProjectFailed:
super.forkFailed( (ExecutionEvent) event );
break;
default:
LOGGER.fine( "event not managed" );
}
}
}
@Override
public void close()
throws Exception
{
//no op
}
}
private static class MavenExecutionListener extends AbstractExecutionListener implements Serializable, ExecutionListener {
private static final long serialVersionUID = 4942789836756366116L;
......
......@@ -778,9 +778,17 @@ public class MavenModuleSetBuild extends AbstractMavenBuild<MavenModuleSet,Maven
final AbstractMavenBuilder builder;
if (maven3orLater) {
builder =
new Maven3Builder(slistener, proxies, project.sortedActiveModules, margs.toList(), envVars,
mavenBuildInformation, maven3MainClass, maven3LauncherClass);
Maven3Builder.Maven3BuilderRequest maven3BuilderRequest = new Maven3Builder.Maven3BuilderRequest();
maven3BuilderRequest.listener=slistener;
maven3BuilderRequest.proxies=proxies;
maven3BuilderRequest.modules=project.sortedActiveModules;
maven3BuilderRequest.goals=margs.toList();
maven3BuilderRequest.systemProps=envVars;
maven3BuilderRequest.mavenBuildInformation=mavenBuildInformation;
maven3BuilderRequest.maven3MainClass=maven3MainClass;
maven3BuilderRequest.maven3LauncherClass=maven3LauncherClass;
maven3BuilderRequest.supportEventSpy = MavenUtil.supportEventSpy( mavenVersion );
builder = new Maven3Builder(maven3BuilderRequest);
} else {
builder =
new Maven2Builder(slistener, proxies, project.sortedActiveModules, margs.toList(), envVars, mavenBuildInformation);
......
......@@ -305,6 +305,7 @@ public class MavenUtil {
/**
* support of {@link org.apache.maven.eventspy.EventSpy} only since 3.0.2
* due to the current implementation will be supported only for maven 3.1.0
* @param mavenVersion
* @return
*/
......@@ -313,7 +314,7 @@ public class MavenUtil {
if (StringUtils.isBlank( mavenVersion )) {
return false;
}
return new ComparableVersion(mavenVersion).compareTo( new ComparableVersion ("3.0.2") ) >= 0;
return new ComparableVersion(mavenVersion).compareTo( new ComparableVersion ("3.1.0") ) >= 0;
}
public enum MavenVersion {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册