ANT: используйте , в ‹arg› без расширения до нескольких аргументов

Следующий тег exec ANT ведет себя не так, как ожидалось.

<exec executable="c:\scratch\test.cmd">
    <arg value="A,B,C"/>
</exec>

При выполнении я ожидаю, что это вызовет text.cmd с 1 аргументом. Однако аргумент расширяется до трех отдельных аргументов.

Согласно Руководству, значение должно передавать содержимое как один аргумент, однако оно передается как три (по одному для каждого компонента строки, разделенных запятой).

Я попытался заменить команду "," точкой с запятой (;), но это тоже не работает. Похоже, что атрибут value arg анализирует предоставленную строку, как если бы это был путь, а это не так.

Кто-нибудь знает, как "A, B, C" передать как один аргумент?

Для полноты мой файл test.cmd выглядит следующим образом:

@echo off
echo Arg1: %1
echo Arg2: %2
echo Arg3: %3
echo Arg4: %4
echo Arg5: %5
echo Arg6: %6
echo Arg7: %7
echo Arg8: %8
echo Arg9: %9

и вывод сборки муравья:

 [exec] Arg1: A
 [exec] Arg2: B
 [exec] Arg3: C
 [exec] Arg4:
 [exec] Arg5:
 [exec] Arg6:
 [exec] Arg7:
 [exec] Arg8:
 [exec] Arg9:

person Armand    schedule 30.11.2012    source источник


Ответы (2)


Проблема решена. Я был настолько сосредоточен на проблеме, связанной с ant, что не стал тратить время на проверку того, как DOS-подобные командные строки интерпретируют аргументы командной строки.

из командной строки Windows я запустил test.cmd a, c, b и увидел, что аргумент команды был разделен, поэтому проблема не связана с ant. так что теперь мне просто нужно выяснить, как заставить ANT цитировать аргументы.

person Armand    schedule 01.12.2012
comment
Для тех, кто читает это, чтобы заключить аргументы в кавычки, просто используя форму одинарной кавычки, чтобы двойные кавычки игнорировались синтаксическим анализатором xml и передавались в строку аргумента: value='some,text here' - person Armand; 06.12.2012

Пытаться:

<exec executable="c:\scratch\test.cmd">
    <arg line="A,B,C"/>
</exec>

См. руководство ant для описания того, как работают аргументы.

person Mark O'Connor    schedule 30.11.2012
comment
свойство line= ведет себя так же, как и свойство value=. Я все еще получаю отчетливо отдельные аргументы в своем тестовом сценарии. - person Armand; 01.12.2012
comment
Я очень хорошо знаком с содержанием руководств по apache ant и много раз просматривал информацию об аргументах, а также страницы задачи exec, пытаясь найти что-либо, что предполагает, что запятые будут интерпретироваться как разделители списка и, следовательно, разделит строку на несколько аргументов. Но там ничего об этом. - person Armand; 01.12.2012