java 调用 maven 进行 编译,打包,上传

写在前面:有时候,心情好了,心情差了,比较极端的两个方面。都会随便写一点。能力有限。想到什么写什么。

平常在大多数的开发情况下,都是 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);
					}
				});
	}
}
发布了50 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/lhf214111967/article/details/102583499