Моя программа получает аргументы командной строки. Как передать его, когда я использую Ant?
Используйте Ant для запуска программы с аргументами командной строки
Ответ 1
Расширение ответа Ричарда Кука.
Здесь задание ant
для запуска любой программы (включая, но не ограничиваясь ими, программы Java):
<target name="run">
<exec executable="name-of-executable">
<arg value="${arg0}"/>
<arg value="${arg1}"/>
</exec>
</target>
Здесь задача запуска программы Java из файла .jar
:
<target name="run-java">
<java jar="path for jar">
<arg value="${arg0}"/>
<arg value="${arg1}"/>
</java>
</target>
Вы можете вызвать либо из командной строки, как это:
ant -Darg0=Hello -Darg1=World run
Обязательно используйте синтаксис -Darg
; если вы запустили это:
ant run arg0 arg1
то ant
попытается запустить цели arg0
и arg1
.
Ответ 2
Если вы не хотите обрабатывать отдельные свойства для каждого возможного аргумента, я предлагаю вам использовать:
<arg line="${args}"/>
Вы можете проверить, не установлено ли свойство с помощью определенной цели с атрибутом unless
и внутри:
<input message="Type the desired command line arguments:" addProperty="args"/>
Объединяя все вместе, давайте:
<target name="run" depends="compile, input-runargs" description="run the project">
<!-- You can use exec here, depending on your needs -->
<java classname="Main">
<arg line="${args}"/>
</java>
</target>
<target name="input-runargs" unless="args" description="prompts for command line arguments if necessary">
<input addProperty="args" message="Type the desired command line arguments:"/>
</target>
Вы можете использовать его следующим образом:
ant
ant run
ant run -Dargs='--help'
Первые две команды будут запрашивать аргументы командной строки, а последние не будут.
Ответ 3
Единственным эффективным механизмом передачи параметров в сборку является использование свойств Java:
ant -Done=1 -Dtwo=2
В следующем примере показано, как вы можете проверить и убедиться, что ожидаемые параметры были переданы в script
<project name="check" default="build">
<condition property="params.set">
<and>
<isset property="one"/>
<isset property="two"/>
</and>
</condition>
<target name="check">
<fail unless="params.set">
Must specify the parameters: one, two
</fail>
</target>
<target name="build" depends="check">
<echo>
one = ${one}
two = ${two}
</echo>
</target>
</project>
Ответ 4
Можете ли вы быть более конкретным о том, что вы пытаетесь сделать и как вы пытаетесь это сделать?
Если вы пытаетесь вызвать программу с помощью задачи <exec>
, вы можете сделать следующее:
<exec executable="name-of-executable">
<arg value="arg0"/>
<arg value="arg1"/>
</exec>
Ответ 5
В конце концов я сделал пакетный файл для извлечения CLASSPATH из файла ant, а затем запустил java напрямую, используя это:
В моем файле build.xml:
<target name="printclasspath">
<pathconvert property="classpathProp" refid="project.class.path"/>
<echo>${classpathProp}</echo>
</target>
В другом script, называемом "run.sh":
export CLASSPATH=$(ant -q printclasspath | grep echo | cut -d \ -f 7):build
java "[email protected]"
Он больше не является межплатформенным, но по крайней мере он относительно прост в использовании, и можно предоставить файл .bat, который делает то же самое, что и run.sh. Это очень короткая партия script. Это не похоже на перенос всей сборки в пакетные файлы для конкретной платформы.
Я думаю, что это позор, а не какой-то вариант в ant, благодаря которому вы могли бы сделать что-то вроде:
ant -- arg1 arg2 arg3
mpirun использует этот тип синтаксиса; ssh также может использовать этот синтаксис, я думаю.