5

我正在尝试从 Ant 构建文件中运行JBoss TattleTale 。通常我像这样从命令行运行它:

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

我的所有 JAR 文件所在/home/myuser/projects/src的源目录在哪里/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>的 s 看起来是否正确,如果不正确,我应该如何更改它们?如果它们看起来确实正确,我能做些什么来调试?提前致谢!

4

3 回答 3

6

两件事情:

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

  2. 当参数用于java命令本身时,您使用<jvmarg>and not <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

于 2012-10-14T19:13:15.230 回答
3

第一个 args 是 JVM 参数而不是程序参数,因此<arg>语法错误。maxmemory对于这种情况,使用任务的参数会更容易java

所以删除第一个<arg>并放入maxmemory=512m块中<java>

于 2012-10-14T16:01:13.397 回答
1

如果您在目标目录中没有看到输出,可能是由于 1) 给定的输入目录中没有存档或 2) tattletale 进程失败。在失败或异常的情况下,tattletale 进程似乎返回退出代码0,它使 ant 相信进程执行成功。

对于调试,我建议您确保给定的目录是正确的,并且有 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暂时为 false,仅用于调试目的。

于 2016-12-22T20:18:19.140 回答