提交 49b76365 编写于 作者: K kohsuke

moved the LifeycleExecutorInterceptor to the same package as in Maven so that...

moved the LifeycleExecutorInterceptor to the same package as in Maven so that Plexus can find the Lifecycle class in the same package.


git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@2342 71c3de6d-444a-0410-be80-ed276b4c234a
上级 eaf19257
......@@ -2,7 +2,7 @@ package hudson.maven;
import hudson.FilePath;
import hudson.Util;
import hudson.maven.agent.Main;
import hudson.maven.agent.*;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
......@@ -22,6 +22,7 @@ import hudson.tasks.test.AbstractTestResultAction;
import hudson.util.ArgumentListBuilder;
import hudson.util.IOException2;
import org.codehaus.classworlds.NoSuchRealmException;
import org.apache.maven.lifecycle.LifecycleExecutorInterceptor;
import java.io.File;
import java.io.FilenameFilter;
......@@ -100,8 +101,6 @@ public class MavenBuild extends AbstractBuild<MavenModule,MavenBuild> {
/**
* Runs Maven and builds the project.
*
* This code is executed on the remote machine.
*/
private static final class Builder implements Callable<Result,IOException> {
private final BuildListener listener;
......@@ -116,8 +115,15 @@ public class MavenBuild extends AbstractBuild<MavenModule,MavenBuild> {
this.goals = goals;
}
/**
* This code is executed inside the maven jail process.
*/
public Result call() throws IOException {
try {
PluginManagerInterceptor pmi = new PluginManagerInterceptor(buildProxy, reporters, listener);
hudson.maven.agent.PluginManagerInterceptor.setListener(pmi);
LifecycleExecutorInterceptor.setListener(pmi);
int r = Main.launch(goals.toArray(new String[goals.size()]));
return r==0 ? Result.SUCCESS : Result.FAILURE;
} catch (NoSuchMethodException e) {
......@@ -131,71 +137,6 @@ public class MavenBuild extends AbstractBuild<MavenModule,MavenBuild> {
} catch (ClassNotFoundException e) {
throw new IOException2(e);
}
//MavenProject p=null;
//try {
// MavenEmbedder embedder = MavenUtil.createEmbedder(listener);
// File pom = new File("pom.xml").getAbsoluteFile(); // MavenEmbedder only works if it's absolute
// if(!pom.exists()) {
// listener.error("No POM: "+pom);
// return Result.FAILURE;
// }
//
// // event monitor is mostly useless. It only provides a few strings
// EventMonitor eventMonitor = new DefaultEventMonitor( new PlexusLoggerAdapter( new EmbedderLoggerImpl(listener) ) );
//
// p = embedder.readProject(pom);
// PluginManagerInterceptor interceptor;
//
// try {
// interceptor = (PluginManagerInterceptor)embedder.getContainer().lookup(PluginManager.class.getName());
// interceptor.setBuilder(buildProxy,reporters,listener);
// } catch (ComponentLookupException e) {
// throw new Error(e); // impossible
// }
//
// for (MavenReporter r : reporters)
// r.preBuild(buildProxy,p,listener);
//
// embedder.execute(p, goals, eventMonitor,
// new TransferListenerImpl(listener),
// null, // TODO: allow additional properties to be specified
// pom.getParentFile());
//
// interceptor.fireLeaveModule();
//
// return null;
//} catch (MavenEmbedderException e) {
// buildProxy.setResult(Result.FAILURE);
// e.printStackTrace(listener.error(e.getMessage()));
//} catch (ProjectBuildingException e) {
// buildProxy.setResult(Result.FAILURE);
// e.printStackTrace(listener.error(e.getMessage()));
//} catch (CycleDetectedException e) {
// buildProxy.setResult(Result.FAILURE);
// e.printStackTrace(listener.error(e.getMessage()));
//} catch (LifecycleExecutionException e) {
// buildProxy.setResult(Result.FAILURE);
// e.printStackTrace(listener.error(e.getMessage()));
//} catch (BuildFailureException e) {
// buildProxy.setResult(Result.FAILURE);
// e.printStackTrace(listener.error(e.getMessage()));
//} catch (DuplicateProjectException e) {
// buildProxy.setResult(Result.FAILURE);
// e.printStackTrace(listener.error(e.getMessage()));
//} catch (AbortException e) {
// listener.error("build aborted");
//} catch (InterruptedException e) {
// listener.error("build aborted");
//} finally {
// // this should happen after a build is marked as a failure
// try {
// if(p!=null)
// for (MavenReporter r : reporters)
// r.postBuild(buildProxy,p,listener);
// } catch (InterruptedException e) {
// buildProxy.setResult(Result.FAILURE);
// }
//}
}
}
......@@ -300,7 +241,7 @@ public class MavenBuild extends AbstractBuild<MavenModule,MavenBuild> {
ArgumentListBuilder args = new ArgumentListBuilder();
args.add(launcher.getChannel().call(new getJavaExe()));
// args.add("-Xrunjdwp:transport=dt_socket,server=y,address=8002");
args.add("-Xrunjdwp:transport=dt_socket,server=y,address=8002");
args.add("-cp");
args.add(
......
......@@ -2,6 +2,12 @@ package hudson.maven;
import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.project.MavenProject;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.execution.ReactorManager;
import org.apache.maven.monitor.event.EventDispatcher;
import org.apache.maven.BuildFailureException;
import org.apache.maven.lifecycle.LifecycleExecutionException;
import org.apache.maven.lifecycle.LifecycleExecutorListener;
import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
import org.codehaus.plexus.configuration.PlexusConfiguration;
......@@ -17,11 +23,11 @@ import hudson.maven.agent.AbortException;
*
* @author Kohsuke Kawaguchi
*/
public class PluginManagerInterceptor implements PluginManagerListener {
public class PluginManagerInterceptor implements PluginManagerListener, LifecycleExecutorListener {
private MavenBuildProxy buildProxy;
private MavenReporter[] reporters;
private BuildListener listener;
private final MavenBuildProxy buildProxy;
private final MavenReporter[] reporters;
private final BuildListener listener;
/**
* Used to detect when to fire {@link MavenReporter#enterModule}
......@@ -36,12 +42,41 @@ public class PluginManagerInterceptor implements PluginManagerListener {
* We can't do this in the constructor because this object is created by
* Plexus along with the rest of Maven objects.
*/
/*package*/ void setBuilder(MavenBuildProxy buildProxy, MavenReporter[] reporters, BuildListener listener) {
public PluginManagerInterceptor(MavenBuildProxy buildProxy, MavenReporter[] reporters, BuildListener listener) {
this.buildProxy = buildProxy;
this.reporters = reporters;
this.listener = listener;
}
/**
* Called before the whole build.
*/
public void preBuild(MavenSession session, ReactorManager rm, EventDispatcher dispatcher) throws BuildFailureException, LifecycleExecutionException {
try {
for (MavenReporter r : reporters)
r.preBuild(buildProxy,rm.getTopLevelProject(),listener);
} catch (InterruptedException e) {
throw new BuildFailureException("aborted",e);
} catch (IOException e) {
throw new BuildFailureException(e.getMessage(),e);
}
}
public void postBuild(MavenSession session, ReactorManager rm, EventDispatcher dispatcher) throws BuildFailureException, LifecycleExecutionException {
try {
fireLeaveModule();
for (MavenReporter r : reporters)
r.postBuild(buildProxy,rm.getTopLevelProject(),listener);
} catch (InterruptedException e) {
throw new BuildFailureException("aborted",e);
} catch (IOException e) {
throw new BuildFailureException(e.getMessage(),e);
} catch (AbortException e) {
throw new BuildFailureException("aborted",e);
}
}
public void preExecute(MavenProject project, MojoExecution exec, PlexusConfiguration mergedConfig, ExpressionEvaluator eval) throws IOException, InterruptedException, AbortException {
if(lastModule!=project) {
// module change
......
package hudson.maven.agent;
package org.apache.maven.lifecycle;
import org.apache.maven.lifecycle.DefaultLifecycleExecutor;
import org.apache.maven.lifecycle.LifecycleExecutionException;
import org.apache.maven.BuildFailureException;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.execution.ReactorManager;
import org.apache.maven.monitor.event.EventDispatcher;
import org.apache.maven.BuildFailureException;
/**
* {@link LifecycleExecutor} interceptor.
*
* <p>
* This class is in the same package as in {@link DefaultLifecycleExecutor},
* because Plexus requires the class and its subordinates (like {@link Lifecycle},
* which is referenced in <tt>components.xml</tt>
*
* @author Kohsuke Kawaguchi
*/
public class LifecycleExecutorInterceptor extends DefaultLifecycleExecutor {
......@@ -19,8 +24,8 @@ public class LifecycleExecutorInterceptor extends DefaultLifecycleExecutor {
private static LifecycleExecutorListener listener;
public static void setListener(LifecycleExecutorListener listener) {
LifecycleExecutorInterceptor.listener = listener;
public static void setListener(LifecycleExecutorListener _listener) {
listener = _listener;
}
public void execute(MavenSession session, ReactorManager rm, EventDispatcher dispatcher) throws BuildFailureException, LifecycleExecutionException {
......
package hudson.maven.agent;
package org.apache.maven.lifecycle;
import org.apache.maven.BuildFailureException;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.execution.ReactorManager;
import org.apache.maven.monitor.event.EventDispatcher;
import org.apache.maven.BuildFailureException;
import org.apache.maven.lifecycle.LifecycleExecutionException;
/**
* Event notification for the start/end of the maven execution.
......
......@@ -39,109 +39,108 @@
</requirement>
</requirements>
</component>
</components>
<component>
<role>org.apache.maven.lifecycle.LifecycleExecutor</role>
<implementation>hudson.maven.agent.LifecycleExecutorInterceptor</implementation>
<requirements>
<requirement>
<role>org.apache.maven.plugin.PluginManager</role>
</requirement>
<requirement>
<role>org.apache.maven.extension.ExtensionManager</role>
</requirement>
<requirement>
<role>org.apache.maven.artifact.handler.manager.ArtifactHandlerManager</role>
</requirement>
</requirements>
<configuration>
<lifecycles>
<lifecycle>
<id>default</id>
<!-- START SNIPPET: lifecycle -->
<phases>
<phase>validate</phase>
<phase>initialize</phase>
<phase>generate-sources</phase>
<phase>process-sources</phase>
<phase>generate-resources</phase>
<phase>process-resources</phase>
<phase>compile</phase>
<phase>process-classes</phase>
<phase>generate-test-sources</phase>
<phase>process-test-sources</phase>
<phase>generate-test-resources</phase>
<phase>process-test-resources</phase>
<phase>test-compile</phase>
<phase>test</phase>
<phase>package</phase>
<phase>pre-integration-test</phase>
<phase>integration-test</phase>
<phase>post-integration-test</phase>
<phase>verify</phase>
<phase>install</phase>
<phase>deploy</phase>
</phases>
<!-- END SNIPPET: lifecycle -->
</lifecycle>
<lifecycle>
<id>clean</id>
<phases>
<phase>pre-clean</phase>
<phase>clean</phase>
<phase>post-clean</phase>
</phases>
<default-phases>
<clean>org.apache.maven.plugins:maven-clean-plugin:clean</clean>
</default-phases>
</lifecycle>
<lifecycle>
<id>site</id>
<phases>
<phase>pre-site</phase>
<phase>site</phase>
<phase>post-site</phase>
<phase>site-deploy</phase>
</phases>
<default-phases>
<site>org.apache.maven.plugins:maven-site-plugin:site</site>
<site-deploy>org.apache.maven.plugins:maven-site-plugin:deploy</site-deploy>
</default-phases>
</lifecycle>
</lifecycles>
<!-- START SNIPPET: default-reports -->
<defaultReports>
<report>org.apache.maven.plugins:maven-project-info-reports-plugin</report>
<!-- TODO: currently in mojo - should they be defaults any more?
<report>org.apache.maven.plugins:maven-checkstyle-plugin</report>
<report>org.apache.maven.plugins:maven-javadoc-plugin</report>
<report>org.apache.maven.plugins:maven-changelog-plugin</report>
<report>org.apache.maven.plugins:maven-surefire-report-plugin</report>
<report>org.apache.maven.plugins:maven-jdepend-plugin</report>
<report>org.apache.maven.plugins:maven-jxr-plugin</report>
<report>org.apache.maven.plugins:maven-taglist-plugin</report>
<component>
<role>org.apache.maven.lifecycle.LifecycleExecutor</role>
<implementation>org.apache.maven.lifecycle.LifecycleExecutorInterceptor</implementation>
<requirements>
<requirement>
<role>org.apache.maven.plugin.PluginManager</role>
</requirement>
<requirement>
<role>org.apache.maven.extension.ExtensionManager</role>
</requirement>
<requirement>
<role>org.apache.maven.artifact.handler.manager.ArtifactHandlerManager</role>
</requirement>
</requirements>
<configuration>
<lifecycles>
<lifecycle>
<id>default</id>
<!-- START SNIPPET: lifecycle -->
<phases>
<phase>validate</phase>
<phase>initialize</phase>
<phase>generate-sources</phase>
<phase>process-sources</phase>
<phase>generate-resources</phase>
<phase>process-resources</phase>
<phase>compile</phase>
<phase>process-classes</phase>
<phase>generate-test-sources</phase>
<phase>process-test-sources</phase>
<phase>generate-test-resources</phase>
<phase>process-test-resources</phase>
<phase>test-compile</phase>
<phase>test</phase>
<phase>package</phase>
<phase>pre-integration-test</phase>
<phase>integration-test</phase>
<phase>post-integration-test</phase>
<phase>verify</phase>
<phase>install</phase>
<phase>deploy</phase>
</phases>
<!-- END SNIPPET: lifecycle -->
</lifecycle>
<lifecycle>
<id>clean</id>
<phases>
<phase>pre-clean</phase>
<phase>clean</phase>
<phase>post-clean</phase>
</phases>
<default-phases>
<clean>org.apache.maven.plugins:maven-clean-plugin:clean</clean>
</default-phases>
</lifecycle>
<lifecycle>
<id>site</id>
<phases>
<phase>pre-site</phase>
<phase>site</phase>
<phase>post-site</phase>
<phase>site-deploy</phase>
</phases>
<default-phases>
<site>org.apache.maven.plugins:maven-site-plugin:site</site>
<site-deploy>org.apache.maven.plugins:maven-site-plugin:deploy</site-deploy>
</default-phases>
</lifecycle>
</lifecycles>
<!-- START SNIPPET: default-reports -->
<defaultReports>
<report>org.apache.maven.plugins:maven-project-info-reports-plugin</report>
<!-- TODO: currently in mojo - should they be defaults any more?
<report>org.apache.maven.plugins:maven-checkstyle-plugin</report>
<report>org.apache.maven.plugins:maven-javadoc-plugin</report>
<report>org.apache.maven.plugins:maven-changelog-plugin</report>
<report>org.apache.maven.plugins:maven-surefire-report-plugin</report>
<report>org.apache.maven.plugins:maven-jdepend-plugin</report>
<report>org.apache.maven.plugins:maven-jxr-plugin</report>
<report>org.apache.maven.plugins:maven-taglist-plugin</report>
-->
</defaultReports>
<!-- END SNIPPET: default-reports -->
<!-- START SNIPPET: default-lifecycle -->
<!-- NOT USED, ACCORDING TO CODE.
<defaultPhases>
<process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
<compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
<process-test-resources>org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources>
<test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
<test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
<package>
org.apache.maven.plugins:maven-jar-plugin:jar,
org.apache.maven.plugins:maven-source-plugin:jar
</package>
<install>org.apache.maven.plugins:maven-install-plugin:install</install>
<deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
</defaultPhases>
-->
</defaultReports>
<!-- END SNIPPET: default-reports -->
<!-- START SNIPPET: default-lifecycle -->
<!-- NOT USED, ACCORDING TO CODE.
<defaultPhases>
<process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
<compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
<process-test-resources>org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources>
<test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
<test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
<package>
org.apache.maven.plugins:maven-jar-plugin:jar,
org.apache.maven.plugins:maven-source-plugin:jar
</package>
<install>org.apache.maven.plugins:maven-install-plugin:install</install>
<deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
</defaultPhases>
-->
<!-- END SNIPPET: default-lifecycle -->
</configuration>
</component>
<!-- END SNIPPET: default-lifecycle -->
</configuration>
</component>
</components>
</component-set>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册