2

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

提前致谢!

4

1 回答 1

0

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

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

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

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

查看您问题中的插件,您可以看到它只是直接调用 JIBX 的 main 方法。换句话说,它根本没有分叉 JVM。如果有你想要的 JVM 选项,你需要使用MAVEN_OPTS环境变量来指定它们(副作用是它们对于 Maven 来说是全局的,如果你忘记指定它们,那么事情就不会像你期望的那样工作)

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

于 2012-08-21T11:26:06.447 回答