我正在尝试从Ant构建文件运行JBoss TattleTale。通常我会从命令行运行它,如下所示:
java -Xmx512m -jar /home/myuser/jars/tattletale.jar /home/myuser/projects/lib /home/myuser/tmp/tt
其中/home/myuser/projects/src
是我所有JAR所在的源目录,/home/myuser/tmp/tt
是我放置所有TattleTale报告的输出目录。
在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>
看起来是否正确,如果没有,我该如何更改?如果它们看起来正确,我可以做些什么来调试?提前谢谢!
答案 0 :(得分:6)
两件事:
在运行Ant时尝试使用debug选项,并将输出保存到日志文件中。然后查看日志文件。它将向您展示它是如何执行Java命令的。这将帮助您确定Ant <java>
与您直接从命令行运行Java的方式有何不同。它将使您能够调整<java>
任务。
如果参数适用于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>
尝试使用,如果您使用的是Unix / Linux,请使用ant -d | tee ant.out
运行。在Windows上,您必须执行ant -d > ant.out.txt
,这会将输出保存在ant.out.txt
中,但在ant
运行时不会显示输出。
答案 1 :(得分:3)
第一个args是JVM参数而不是程序参数,因此<arg>
的语法错误。对于这种情况,使用maxmemory
任务的java
参数更容易。
请删除第一个<arg>
并将maxmemory=512m
放入<java>
块。
答案 2 :(得分:1)
如果在目标目录中看不到输出,则可能是由于1)给定输入目录中没有存档或2)tattletale进程失败。
在失败或异常的情况下,tattletale进程似乎返回退出代码>
并且它使得ant相信流程执行成功。
为了调试,我建议你
确保给定目录正确并具有java归档(jar)文件并分析0
生成的标准输出/错误。
示例:
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}" />
暂时为false,仅用于调试目的。