2012-06-12 31 views
1

我有一個情況,我們用JSmooth包裝一個jar來獲得一個合適的exe文件。maven - > ant - > jsmoothgen:如何提供-Djava.awt.headless = true?

傳統上這是由ant構建的,作爲我們一般的mavenification的一部分,目前的短期解決方案是使用maven-antrun-plugin來設置一個屬性並調用ant。

不幸的是,這種方法在Unix上構建時失敗(因爲沒有X11顯示器可用),並且解決方案是用-Djava.awt.headless=true調用JVM。我想在我的pom.xml中執行此操作,但無法確定在哪裏執行此操作。

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <configuration> 
       <target> 
        <!-- create one-jar and exefy it --> 
        <property name="maven.project.build.finalName" value="${project.build.finalName}" /> 
        <!-- note: fails on headless Linux for now --> 
        <ant /> 
       </target> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

可以直接fork一個新的JVM,但不依賴平臺的細節。

我該如何正確地做到這一點?

+0

你能提供你正在調用的ant'build.xml'文件的內容嗎? –

回答

2

螞蟻手冊有一個標題爲「Running Ant via Java」的部分,它顯示瞭如何做你想要的。他們爲榜樣的輕微扭捏版本抄錄如下:

<java 
     classname="org.apache.tools.ant.launch.Launcher" 
     fork="true" 
     failonerror="true" 
     dir="${basedir}" 
     taskname="headless-ant" 
> 
    <classpath> 
     <pathelement location="${ant.home}/lib/ant-launcher.jar"/> 
    </classpath> 
    <arg value="-buildfile"/> 
    <arg file="${ant.file}"/> 
    <arg value="-Dbasedir=${basedir}"/> 
    <jvmarg value="-Djava.awt.headless=true"/> 
</java> 

如果你把片段取代<ant>元素在你的代碼段,它應該做的伎倆。

+0

偉大的解決方法!這有點奇怪,但它會滿足要求:)。 –

+1

需要使用'

+0

修復,謝謝。 –

5

據我所知,沒有分叉JVM的解決方案是使用MAVEN_OPT

export MAVEN_OPTS="-Djava.awt.headless=true" 

由於-D是JVM選項,你必須指定它直接Maven的。你不能(再次,從我所知道的)通過它作爲內部參數(並且沒有任何配置選項允許它)

因此,使用MAVEN_OPT參數成爲正確的方法。

編輯1:

您可以一目瞭然這裏用好了maven2-antrun-插件

http://code.google.com/p/better-maven2-antrun-plugin/wiki/Usage

編輯2: 能也許可以幫助maven-antrun developpement爲他們提供了一種指定參數的方法,如ma ven-compiler-plugin。如果你真的想使用pom信息,這將是最好的方式。

+0

@ThorbjørnRavnAndersen - 我認爲鏈接頁面上的「設置JVM選項」部分描述了您正在尋找的內容。 – Attila

+0

我不想使用MAVEN_OPTS,我想在我的pom.xml中使用它。我會看看更新的antrun。 –

+0

進一步google搜索後,似乎maven-ant-run插件實際上沒有params來指定jvm選項。我仍然在尋找,但我很確定這個問題沒有解決方案。 –

相關問題