在你问为什么我只能生成一个进程来执行 mvn 之前,我希望通过 Maven API 执行 Maven 构建,这样我就可以收集有关构建中发生的事情、生成的 Artifact 等的信息。之后根据 org.apache.maven:maven-core:jar:3.0.4
,我编写了以下方法来尝试做这样的事情:
public static void build(File directory, File pom) {
Maven maven = new DefaultMaven();
MavenExecutionRequest exec = new DefaultMavenExecutionRequest();
exec.setBaseDirectory(directory);
exec.setPom(pom);
MavenExecutionResult result = maven.execute(exec);
MavenProject proj = result.getProject();
Artifact art = proj.getArtifact();
System.out.println(art);
}
但是由于空指针异常,此代码在 maven.execute
处失败。由于 DefaultMaven
中的私有(private)字段没有被初始化,这些空指针异常基本上无处不在。它们都带有 @Required
注释,所以我猜这与 Plexus 有关。
我怎样才能成功地使用 Maven 来执行这样的构建?
最佳答案
您需要使用实际的 Maven 嵌入 API:
http://maven.apache.org/ref/3.0/maven-embedder/apidocs/index.html
要查看示例,请查看 M2Eclipse 的开源。
现在,这个组件的名字并不是很好。它实际上是一个旨在制作 CLI 的便利包装器。所以,您要做的就是阅读它的来源。
关于java - 使用 Maven 3 API 进行编程构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14275841/