写在前面:有时候,心情好了,心情差了,比较极端的两个方面。都会随便写一点。能力有限。想到什么写什么。
平常在大多数的开发情况下,都是 eclipse idea 右键 maven clean build install ....
那java 有没有可能调用maven 进行这些操作呢。
对于这个答案,我想说的是,这个可以。
第一步:pom.xml 增加
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.maven.shared/maven-invoker -->
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-invoker</artifactId>
<version>3.0.1</version>
</dependency>
</dependencies>
第二步: (习惯性编写回调,如果你不想要,也可以删除.)
public interface CallBack {
public void call(String msg);
}
第三步:返回类,不想要也可以删除。
public class Res {
private boolean flag;
private List<String> result;
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public List<String> getResult() {
return result;
}
public void setResult(List<String> result) {
this.result = result;
}
}
最后几句关键代码:
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.maven.shared.invoker.DefaultInvocationRequest;
import org.apache.maven.shared.invoker.DefaultInvoker;
import org.apache.maven.shared.invoker.InvocationOutputHandler;
import org.apache.maven.shared.invoker.InvocationRequest;
import org.apache.maven.shared.invoker.InvocationResult;
import org.apache.maven.shared.invoker.Invoker;
import org.apache.maven.shared.invoker.InvokerLogger;
import org.apache.maven.shared.invoker.MavenInvocationException;
import org.apache.maven.shared.invoker.PrintStreamLogger;
public class MavenBuild {
public static Res build(String pomXml, String mavenHome,CallBack call) {
Res res = new Res();
try {
List<String> strs = new ArrayList<>();
res = run(pomXml, mavenHome, "clean",call);
call.call(null);
if (!res.isFlag()) {
Res res1 = run(pomXml, mavenHome, "clean",call);
res.setFlag(res1.isFlag());
strs.addAll(res1.getResult());
}else {
strs.addAll(res.getResult());
}
strs.add("");
strs.add("");
strs.add("");
res = run(pomXml, mavenHome, "install",call);
call.call(null);
if (!res.isFlag()) {
Res res2 = run(pomXml, mavenHome, "install",call);
res.setFlag(res2.isFlag());
strs.addAll(res2.getResult());
}else {
strs.addAll(res.getResult());
}
res.setResult(strs);
return res;
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
public static Res run(String pomXml, String mavenHome, String gola,CallBack call) throws MavenInvocationException {
Res res = new Res();
List<String> rs = new ArrayList<String>();
InvocationRequest request = new DefaultInvocationRequest();
request.setPomFile(new File(pomXml));
request.setGoals(Arrays.asList(gola));
Invoker invoker = new DefaultInvoker();
invoker.setMavenHome(new File(mavenHome));
invoker.setLogger(new PrintStreamLogger(System.err, InvokerLogger.ERROR));
invoker.setOutputHandler(new InvocationOutputHandler() {
@Override
public void consumeLine(String s) throws IOException {
call.call(s);
rs.add(s);
}
});
res.setResult(rs);
InvocationResult result = invoker.execute(request);
if (result.getExitCode() == 0) {
res.setFlag(true);
} else {
res.setFlag(false);
}
return res;
}
public static void main(String[] args) {
MavenBuild.build("xxxx\\pom.xml",
"D:\\gongju\\maven\\apache-maven-3.2.5",new CallBack() {
@Override
public void call(String msg) {
System.out.println(msg);
}
});
}
}