hudson.tasks.Maven Maven / Gradle / Ivy
package hudson.tasks;
import hudson.CopyOnWrite;
import hudson.Launcher;
import hudson.Util;
import hudson.model.Build;
import hudson.model.BuildListener;
import hudson.model.Descriptor;
import hudson.model.Project;
import hudson.util.FormFieldValidator;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Map;
/**
* Build by using Maven.
*
* @author Kohsuke Kawaguchi
*/
public class Maven extends Builder {
private final String targets;
/**
* Identifies {@link MavenInstallation} to be used.
*/
private final String mavenName;
public Maven(String targets,String mavenName) {
this.targets = targets;
this.mavenName = mavenName;
}
public String getTargets() {
return targets;
}
/**
* Gets the Maven to invoke,
* or null to invoke the default one.
*/
public MavenInstallation getMaven() {
for( MavenInstallation i : DESCRIPTOR.getInstallations() ) {
if(mavenName !=null && i.getName().equals(mavenName))
return i;
}
return null;
}
public boolean perform(Build build, Launcher launcher, BuildListener listener) {
Project proj = build.getProject();
String cmd;
String execName;
if(launcher.isUnix())
execName = "maven";
else
execName = "maven.bat";
MavenInstallation ai = getMaven();
if(ai==null)
cmd = execName+' '+targets;
else {
File exec = ai.getExecutable();
if(exec==null) {
listener.fatalError("Couldn't find any executable in "+ai.getMavenHome());
return false;
}
if(!exec.exists()) {
listener.fatalError(exec+" doesn't exist");
return false;
}
cmd = exec.getPath()+' '+targets;
}
Map env = build.getEnvVars();
if(ai!=null)
env.put("MAVEN_HOME",ai.getMavenHome());
// just as a precaution
// see http://maven.apache.org/continuum/faqs.html#how-does-continuum-detect-a-successful-build
env.put("MAVEN_TERMINATE_CMD","on");
try {
int r = launcher.launch(cmd,env,listener.getLogger(),proj.getModuleRoot()).join();
return r==0;
} catch (IOException e) {
Util.displayIOException(e,listener);
e.printStackTrace( listener.fatalError("command execution failed") );
return false;
}
}
public Descriptor getDescriptor() {
return DESCRIPTOR;
}
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
public static final class DescriptorImpl extends Descriptor {
@CopyOnWrite
private volatile MavenInstallation[] installations = new MavenInstallation[0];
private DescriptorImpl() {
super(Maven.class);
load();
}
protected void convert(Map oldPropertyBag) {
if(oldPropertyBag.containsKey("installations"))
installations = (MavenInstallation[]) oldPropertyBag.get("installations");
}
public String getHelpFile() {
return "/help/project-config/maven.html";
}
public String getDisplayName() {
return "Invoke top-level Maven targets";
}
public MavenInstallation[] getInstallations() {
return installations;
}
public boolean configure(StaplerRequest req) {
boolean r = true;
int i;
String[] names = req.getParameterValues("maven_name");
String[] homes = req.getParameterValues("maven_home");
int len;
if(names!=null && homes!=null)
len = Math.min(names.length,homes.length);
else
len = 0;
MavenInstallation[] insts = new MavenInstallation[len];
for( i=0; i © 2015 - 2025 Weber Informatics LLC | Privacy Policy