2012-05-02 93 views
2

我知道像surefire這樣的插件有一個「argLine」配置參數,它們傳遞給運行插件的特定目標的JVM。據我所知,默認情況下,Maven插件分叉並運行在一個單獨的JVM中(如果我錯了,請糾正我)。 我想弄清楚如何將虛擬機參數傳遞給一個maven插件jibx,但不知道是否有一個更簡單/聲明的方式(或通過一個Util類),我可以配置它來做到這一點。毫無疑問,booterclient中有實用程序類似於處理這種情況,但功能似乎是跨插件通用的,對吧?因此,想知道是否可以從Mojo/Plexus獲得一些支持,無需編寫一些管道代碼即可輕鬆添加。再次,請糾正我,如果我的理解不正確將JVM選項傳遞給maven插件

在此先感謝!

回答

0

實際的Maven插件類在與Maven相同的JVM中運行。

如果Maven插件包裝了一個單獨的工具,它取決於Maven插件是如何寫入的,而不管它是否分叉。

例如,Cobertura Maven Plugin分叉了一個過程來完成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選項