【问题标题】:Passing JVM opts to maven plugin将 JVM 选项传递给 Maven 插件
【发布时间】:2012-05-11 14:32:59
【问题描述】:

我知道像surefire这样的插件有一个“argLine”配置参数,它们传递给运行插件特定目标的JVM。据我了解,默认情况下,maven 插件是分叉的并在单独的 JVM 中运行(如果我错了,请纠正我)。 我试图弄清楚如何将 VM 参数传递给 maven 插件jibx,但不知道是否有更简单/声明性的方式(或通过 Util 类)可以配置它来执行此操作。在万无一失的情况下,booterclient 中有一些实用程序类似乎正在处理这个问题,但该功能似乎在插件中是通用的,对吧?因此想知道 Mojo/Plexus 是否有一些支持可以轻松添加它而无需编写一堆管道代码。再次,如果我的理解不正确,请纠正我

提前致谢!

【问题讨论】:

    标签: maven-plugin


    【解决方案1】:

    实际的 Maven 插件类与 Maven 在同一个 JVM 中运行。

    Maven 插件在哪里包装一个单独的工具,这取决于 Maven 插件是如何编写的,它是否分叉一个进程。

    例如,Cobertura Maven 插件派生了一个流程来执行 Cobertura 的事情。这种分叉没有技术原因,在 Cobertura 的情况下,JVM 的分叉是为了解决 Cobertura 工具本身的 GPL 许可。

    正如您所注意到的,Surefire 插件通常会派生一个用于运行单元测试的进程。它在技术上不需要分叉(请参阅forkMode=never)但是,由于 JVM 的某些需要分叉的部分的隔离性差,这是有充分理由的,例如系统属性是全局的。

    查看您的问题you can see that it is just invoking the JIBX's main method directly 中的插件。换句话说,它根本没有分叉 JVM。如果有您想要的 JVM 选项,您将需要使用 MAVEN_OPTS 环境变量来指定它们(副作用是它们对于 Maven 是全局的,如果您忘记指定它们,那么事情将无法正常工作你期望)

    我认为要解决这个问题,你真的应该向插件建议一个补丁,该补丁用于分叉并接受分叉 JVM 的 JVM 选项

    【讨论】: