这些Ant / JVM args有什么问题?

时间:2012-10-14 15:52:55

标签: java ant jvm-arguments

我正在尝试从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>看起来是否正确,如果没有,我该如何更改?如果它们看起来正确,我可以做些什么来调试?提前谢谢!

3 个答案:

答案 0 :(得分:6)

两件事:

  1. 在运行Ant时尝试使用debug选项,并将输出保存到日志文件中。然后查看日志文件。它将向您展示它是如何执行Java命令的。这将帮助您确定Ant <java>与您直接从命令行运行Java的方式有何不同。它将使您能够调整<java>任务。

  2. 如果参数适用于java命令本身,则使用<jvmarg>而不是<arg>

  3. 一个例子:

    <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,仅用于调试目的。