Maven集成 – Maven Invoker

2018年12月18日 0 条评论 4.36k 次阅读 0 人点赞

简介

Maven Invoker可以避免用户因使用Maven插件而造成的系统环境污染,同时支持在当前$ {user.dir}以外的工作目录进行项目构建。Maven Invoker不会将Maven嵌入到用户的应用程序中, 同时也不会有太多依赖,因此与Maven Embedder相比显得非常轻量级。当多个构建过程同时执行时,Maven Invoker支持用户中断其指定的某一个构建过程。

Maven Invoker API被调用时会在一个新的JVM进程中启动Maven构建,可以捕获退出码和构建过程中抛出的异常。用户可以通过使用InputStreamInvocationOutputHandler自定义输入/输出。

依赖

用法

  • 基本用法

下面将介绍Maven调用API的基本用法。用户可以同时构建invoker 和request ,通过调用invoker.execute(request)来实现构建过程。本例中,我们暂时先不关心构建结果是否成功:

运行上述代码可以看到jar包已经打好:

  • 利用退出码判断构建结果

此外,如果还可以通过退出码来判断构建结果是否成功,退出码为“0”表示构建成功,退出码为“1”则表示构建失败:

构建成功会终端打印"build process succeeds!":

  • Invoker单实例配置复用

用户可以通过Invoker配置为Maven API调用指定全局选项,配置单个Invoker实例并在多个方法调用从而实现复用。

测试:

  • 结合InvocationOutputHandler捕获构建输出

如果用户想要获取构建过程详情,可以利用InvocationOutputHandler进行捕获。InvocationOutputHandler可以通过invoker 或者request进行设置。

测试:

注意事项

  • 用户可以使用Invoker.setMavenHome()方法来指定Maven可执行文件位置。 如果用户没有设置该值,则Invoker将使用系统属性maven.home或环境变量M2_HOME的值作为其默认值。
  • 如果在Maven Surefire插件运行的单元测试中进行了API调用,则需要Surefire将系统属性maven.home传递给测试用例:

参考资料

https://github.com/apache/maven-invoker

https://maven.apache.org/shared/maven-invoker/index.html

勇敢,和生活的艰难无关。

文章评论(0)