我使用Maven Invoker在Java代码中运行一些maven命令。以下是我在编写自己的代码之前阅读的参考资料:
maven-invoker-illegal-state-exception,how-to-run-maven-from-java,Maven Invoker Usage
我的代码就像:
InvocationRequest request = new DefaultInvocationRequest();
request.setPomFile(new File("absolute/path/of/pom.xml"));
request.setGoals(Arrays.asList("clean", "install"));
Invoker invoker = new DefaultInvoker();
invoker.setMavenHome(new File("absolute/path/of/maven/"));
invoker.setWorkingDirectory(new File("./")); //will fail with or without this line
InvocationResult result = invoker.execute(request);
System.out.println(result.getExitCode());
我得到的ExitCode
总是1,这意味着构建失败。但是,我可以从命令行正确执行所有Maven命令。
此外,我还想通过引用this answer来使用pom.xml
下载request.setGoals(Arrays.asList("dependency:copy-dependencies", "-DoutputDirectory=OUTPUT_DIR"));
中声明的依赖项。 maven-dependency_plugin
正确包含pom.xml
。
是不是因为我正在编写一个多模块项目而且所有这些都在一个模块下而不是从根目录下?如果是这样,这样做的正确方法是什么?非常感谢。
更新:
最后,我提到了this page,并改为使用ProcessBuilder
代替,这是有效的。
但我仍然没有理解为什么Invoker
对我失败了。任何答案都将不胜感激。