Что не так с этими аргументами Ant/JVM?

Я пытаюсь запустить JBoss TattleTale из файла сборки Ant. Обычно я запускаю его из командной строки так:

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>, и если нет, то как мне их изменить? Если они выглядят правильно, что я могу сделать для отладки? Заранее спасибо!


person IAmYourFaja    schedule 14.10.2012    source источник


Ответы (3)


Две вещи:

  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.

person David W.    schedule 14.10.2012

Первые аргументы — это аргумент JVM, а не аргумент программы, поэтому <arg> — это неправильный синтаксис. В этом случае проще использовать параметр maxmemory задачи java.

Поэтому удалите первый <arg> и поместите maxmemory=512m в блок <java>.

person Mike Q    schedule 14.10.2012
comment
Спасибо @Mike Q (+1) - но я все еще не вижу, чтобы что-то генерировалось в выходном каталоге. - person IAmYourFaja; 14.10.2012

Если вы не видите вывода в целевом каталоге, это может быть связано с 1) отсутствием архива в данном входном каталоге или 2) сбоем процесса tattletale. В случае сбоя или исключения процесс Tattletale возвращает код выхода 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 временно является ложным только для целей отладки.

person skadya    schedule 22.12.2016