使用Maven 3 API进行编程构建

md_*_*d_5 9 java maven

在你问为什么我可以生成一个进程来执行mvn之前,我希望通过Maven API执行一个Maven构建,这样我就可以收集关于构建中发生的事情,产生的工件等的信息.依赖于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);
}
Run Code Online (Sandbox Code Playgroud)

但是,maven.execute由于空指针异常,此代码失败.由于DefaultMaven未初始化私有字段,这些空指针异常基本上无处不在.它们都带有注释@Required,所以我猜这与Plexus有关.

如何成功使用Maven来执行这样的构建?

cow*_*wls 0

我从未真正使用过这个 API,不过看起来很有趣。

我不明白你将目标设定在哪里?

您可能需要setGoals在 Maven 执行请求上调用:

http://maven.apache.org/ref/3.0.3/maven-core/apidocs/org/apache/maven/execution/DefaultMavenExecutionRequest.html#setGoals%28java.util.List%29