2012-10-14 34 views
5

我想從一個Ant構建運行JBoss TattleTale。通常我從命令行運行它像這樣:這些Ant/JVM參數有什麼問題?

java -Xmx512m -jar /home/myuser/jars/tattletale.jar /home/myuser/projects/lib /home/myuser/tmp/tt 

其中/home/myuser/projects/src是源目錄,我所有的罐子,並在/home/myuser/tmp/tt是我把所有的告密的報告的輸出目錄。

在Ant構建我使用了以下內容:

<echo message="Running tattle-tale..."/> 
<java fork="true" failonerror="true" jar="/home/myuser/jars/tattletale.jar"> 
    <arg value="Xmx512m"/> 
    <arg value="/home/myuser/projects/lib"/> 
    <arg value="/home/myuser/tmp/tt"/> 
</java> 

當我從命令行運行這一目標:

run-tattletale: 
    [echo] Running tattle-tale... 

BUILD SUCCESSFUL 
Total time: 3 seconds 

當我去/home/myuser/tmp/tt我沒有看到任何輸出,然而Ant輸出顯示SUCCESS沒有錯誤或警告。我的<arg>看起來是否正確,如果不正確,我應該如何改變它們?如果他們確實看起來正確,我能做些什麼來調試?提前致謝!

回答

3

第一個參數表是JVM參數不是程序參數,所以<arg>是錯誤的語法。對於這種情況,它更容易使用java任務的maxmemory參數。

因此,刪除第一個<arg>並將maxmemory=512m放入<java>塊中。

+0

感謝@Mike Q(+1) - 但我仍然沒有看到輸出目錄中正在生成的任何東西。 – IAmYourFaja

6

兩件事情:

  1. 嘗試在運行Ant時,使用調試選項,而輸出保存到一個日誌文件。然後看看日誌文件。它會告訴你它是如何執行Java命令的。這將幫助您找出Ant <java>與您直接從命令行運行Java的方式不同的地方。它會給你訣竅<java>任務的能力。

  2. 當一個參數是java命令本身,您使用<jvmarg>,而不是<arg>

一個例子:

<echo message="Running tattle-tale..."/> 
<java fork="true" 
    failonerror="true" 
    jar="/home/myuser/jars/tattletale.jar"> 
    <jvmarg value="-Xmx512m"/> <!-- Note the dash! --> 
    <arg value="/home/myuser/projects/lib"/> 
    <arg value="/home/myuser/tmp/tt"/> 
</java> 

試一下,並與ant -d | tee ant.out如果你運行在Unix/Linux上。在Windows上,你就必須做ant -d > ant.out.txt這將節省在ant.out.txt輸出,但同時ant運行時將不會顯示輸出。

1

如果你看到在目標目錄中沒有輸出,這可能是由於1)有在給定的輸入目錄中沒有存檔或2)告密過程失敗。 在出現故障或異常的情況下,告密過程似乎返回退出代碼0,這讓螞蟻認爲,這一進程的執行是成功的。

對於調試,我建議你 確保定目錄是正確的,具有Java歸檔(JAR)文件和分析標準輸出/錯誤通過tattletale生產。

例子:

<echo message="Running tattle-tale..."/> 
<java fork="true" 
    failonerror="false" 
    errorproperty="errorproperty" 
    outputproperty="outputproperty" 
    jar="/home/myuser/jars/tattletale.jar"> 
    <jvmarg value="-Xmx512m"/> <!-- Note the dash! --> 
    <arg value="/home/myuser/projects/lib"/> 
    <arg value="/home/myuser/tmp/tt"/> 
</java> 
<echo message="stdout>> ${outputproperty}"/> 
<echo message="stderr>> ${errorproperty}" /> 

注: - failonerror是僅供調試錯誤是暫時的。