将JVM选择传递给maven插件

时间:2012-05-02 05:43:04

标签: maven-plugin

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

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

如果Maven插件正在包装一个单独的工具,那么它取决于Maven插件的编写方式,无论它是否分叉进程。

例如,Cobertura Maven插件会强制执行Cobertura事务。这个分支没有技术上的原因,在Cobertura的情况下,JVM的分支是解决Cobertura工具本身的GPL许可。

正如您所注意到的那样,Surefire插件通常会执行运行单元测试的过程。它在技术上不需要fork(参见forkMode=never)但是,由于JVM的某些需要分叉的部分隔离不好,因此有很好的理由。系统属性是全局的。

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

我认为要解决这个问题,你应该真的建议插件的补丁,它可以分叉和接受分叉JVM的JVM选项