提交 407fd9ad 编写于 作者: K kohsuke

expanding the maven support.


git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@2006 71c3de6d-444a-0410-be80-ed276b4c234a
上级 2c05c68c
package hudson.maven;
import hudson.FilePath;
import hudson.FilePath.FileCallable;
import hudson.maven.PluginManagerInterceptor.AbortException;
import hudson.model.AbstractBuild;
import hudson.model.BuildListener;
import hudson.model.Result;
import hudson.model.Run;
import hudson.model.AbstractProject;
import hudson.model.Hudson;
import hudson.model.BuildListener;
import hudson.model.DependencyGraph;
import hudson.model.Fingerprint.RangeSet;
import hudson.remoting.VirtualChannel;
import hudson.model.Hudson;
import hudson.model.Result;
import hudson.model.Run;
import hudson.remoting.Channel;
import hudson.remoting.VirtualChannel;
import hudson.util.IOException2;
import hudson.FilePath;
import hudson.maven.PluginManagerInterceptor.AbortException;
import org.apache.maven.BuildFailureException;
import org.apache.maven.plugin.PluginManager;
import org.apache.maven.embedder.MavenEmbedderException;
import org.apache.maven.embedder.PlexusLoggerAdapter;
import org.apache.maven.lifecycle.LifecycleExecutionException;
import org.apache.maven.monitor.event.DefaultEventMonitor;
import org.apache.maven.monitor.event.EventMonitor;
import org.apache.maven.plugin.PluginManager;
import org.apache.maven.project.DuplicateProjectException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuildingException;
import org.codehaus.plexus.util.dag.CycleDetectedException;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.util.dag.CycleDetectedException;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
/**
* {@link Run} for {@link MavenModule}.
......@@ -168,13 +170,19 @@ public class MavenBuild extends AbstractBuild<MavenModule,MavenBuild> {
private class RunnerImpl extends AbstractRunner {
protected Result doRun(BuildListener listener) throws Exception {
//if(!preBuild(listener,project.getBuilders()))
// return Result.FAILURE;
//if(!preBuild(listener,project.getPublishers()))
// return Result.FAILURE;
// pick up a list of reporters to run
List<MavenReporter> reporters = new ArrayList<MavenReporter>();
getProject().getReporters().addAllTo(reporters);
for (MavenReporterDescriptor d : MavenReporters.LIST) {
if(getProject().getReporters().contains(d))
continue; // already configured
MavenReporter auto = d.newAutoInstance(getProject());
if(auto!=null)
reporters.add(auto);
}
return getProject().getModuleRoot().act(new Builder(listener,new ProxyImpl(),
getProject().getReporters().toArray(new MavenReporter[0])));
reporters.toArray(new MavenReporter[0])));
}
public void post(BuildListener listener) {
......
package hudson.maven;
import hudson.model.Describable;
import hudson.model.BuildListener;
import hudson.ExtensionPoint;
import hudson.model.Action;
import hudson.model.BuildListener;
import hudson.model.Describable;
import hudson.model.Project;
import hudson.ExtensionPoint;
import hudson.tasks.BuildStep;
import org.apache.maven.project.MavenProject;
import java.io.IOException;
import org.apache.maven.project.MavenProject;
/**
* Listens to the build execution of {@link MavenBuild},
* and normally records some information and exposes thoses
......@@ -145,4 +144,6 @@ public abstract class MavenReporter implements Describable<MavenReporter>, Exten
public Action getProjectAction(MavenModule project) {
return null;
}
public abstract MavenReporterDescriptor getDescriptor();
}
package hudson.maven;
import hudson.model.Descriptor;
import hudson.maven.reporters.MavenArtifactArchiver;
/**
* {@link Descriptor} for {@link MavenReporter}.
*
* @author Kohsuke Kawaguchi
*/
public abstract class MavenReporterDescriptor extends Descriptor<MavenReporter> {
protected MavenReporterDescriptor(Class<? extends MavenReporter> clazz) {
super(clazz);
}
/**
* Returns an instance used for automatic {@link MavenReporter} activation.
*
* <p>
* Some {@link MavenReporter}s, such as {@link MavenArtifactArchiver},
* can work just with the configuration in POM and don't need any additional
* Hudson configuration. They also don't need any explicit enabling/disabling
* as they can activate themselves by listening to the callback from the build
* (for example javadoc archiver can do the work in response to the execution
* of the javadoc target.)
*
* <p>
* Those {@link MavenReporter}s should return a valid instance
* from this method. Such instance will then participate into the build
* and receive event callbacks.
*/
public MavenReporter newAutoInstance(MavenModule module) {
return null;
}
}
......@@ -13,7 +13,7 @@ public final class MavenReporters {
/**
* List of all installed {@link MavenReporter}s.
*/
public static final List<Descriptor<MavenReporter>> LIST = Descriptor.<Descriptor<MavenReporter>>toList(
public static final List<MavenReporterDescriptor> LIST = Descriptor.<MavenReporterDescriptor>toList(
MavenArtifactArchiver.DescriptorImpl.DESCRIPTOR
);
}
package hudson.maven.reporters;
import hudson.FilePath;
import hudson.maven.MavenBuildProxy;
import hudson.maven.MavenReporter;
import hudson.maven.MavenBuild;
import hudson.maven.MavenBuildProxy;
import hudson.maven.MavenBuildProxy.BuildCallable;
import hudson.maven.MavenModule;
import hudson.maven.MavenReporter;
import hudson.maven.MavenReporterDescriptor;
import hudson.model.BuildListener;
import hudson.model.Descriptor;
import hudson.model.FingerprintMap;
import hudson.model.Hudson;
import org.apache.maven.artifact.Artifact;
......@@ -14,8 +15,8 @@ import org.apache.maven.project.MavenProject;
import org.kohsuke.stapler.StaplerRequest;
import java.io.IOException;
import java.util.Set;
import java.util.HashSet;
import java.util.Set;
/**
* Archives artifacts of the build.
......@@ -67,7 +68,7 @@ public class MavenArtifactArchiver extends MavenReporter {
return DescriptorImpl.DESCRIPTOR;
}
public static final class DescriptorImpl extends Descriptor<MavenReporter> {
public static final class DescriptorImpl extends MavenReporterDescriptor {
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
private DescriptorImpl() {
......@@ -81,5 +82,9 @@ public class MavenArtifactArchiver extends MavenReporter {
public MavenArtifactArchiver newInstance(StaplerRequest req) throws FormException {
return new MavenArtifactArchiver();
}
public MavenReporter newAutoInstance(MavenModule module) {
return new MavenArtifactArchiver();
}
}
}
......@@ -99,6 +99,10 @@ public class CopyOnWriteList<E> implements Iterable<E> {
return core.toArray(array);
}
public void addAllTo(Collection<? super E> dst) {
dst.addAll(core);
}
/**
* {@link Converter} implementation for XStream.
*/
......
......@@ -10,6 +10,7 @@ import com.thoughtworks.xstream.mapper.Mapper;
import hudson.model.Describable;
import hudson.model.Descriptor;
import hudson.model.Descriptor.FormException;
import hudson.maven.MavenReporterDescriptor;
import org.kohsuke.stapler.StaplerRequest;
import java.io.IOException;
......@@ -17,6 +18,7 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* Persisted list of {@link Describable}s with some operations specific
......@@ -44,6 +46,17 @@ public class DescribableList<T extends Describable<T>, D extends Descriptor<T>>
owner.save();
}
public T get(D descriptor) {
for (T t : data)
if(t.getDescriptor()==descriptor)
return t;
return null;
}
public boolean contains(D d) {
return get(d)!=null;
}
public void remove(D descriptor) throws IOException {
for (T t : data) {
if(t.getDescriptor()==descriptor) {
......@@ -70,6 +83,10 @@ public class DescribableList<T extends Describable<T>, D extends Descriptor<T>>
return data.toArray(array);
}
public void addAllTo(Collection<? super T> dst) {
data.addAllTo(dst);
}
/**
* Rebuilds the list by creating a fresh instances from the submitted form.
*
......@@ -77,7 +94,7 @@ public class DescribableList<T extends Describable<T>, D extends Descriptor<T>>
* This method is almost always used by the owner.
* This method does not invoke the save method.
*/
public void rebuild(StaplerRequest req, List<Descriptor<T>> descriptors, String prefix) throws FormException {
public void rebuild(StaplerRequest req, List<? extends Descriptor<T>> descriptors, String prefix) throws FormException {
List<T> newList = new ArrayList<T>();
for( int i=0; i< descriptors.size(); i++ ) {
......@@ -90,7 +107,6 @@ public class DescribableList<T extends Describable<T>, D extends Descriptor<T>>
data.replaceBy(newList);
}
public interface Owner {
/**
* Called whenever the list is changed, so that it can be saved.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册