Используйте Ant для запуска программы с аргументами командной строки
моя программа получает аргументы командной строки. Как я могу передать его, когда я использую Ant?
5 ответов:
расширения Ричард Кук'ы ответ.
здесь
ant
задач для запуска любой программы (включая, но не ограничиваясь Java программы):<target name="run"> <exec executable="name-of-executable"> <arg value="${arg0}"/> <arg value="${arg1}"/> </exec> </target>
вот задача запустить программу Java из
.jar
file:<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
.
если вы не хотите обрабатывать отдельные свойства для каждого возможного аргумента, я предлагаю тебе использовать:
<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'
первые две команды будут запрашивать аргументы командной строки, а последние-нет.
единственным эффективным механизмом передачи параметров в сборку является использование свойств Java:
ant -Done=1 -Dtwo=2
в следующем примере показано, как можно проверить и убедиться, что ожидаемые параметры были переданы в скрипт
<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>
можете ли вы быть немного более конкретным о том, что вы пытаетесь сделать и как вы пытаетесь это сделать?
Если вы пытаетесь вызвать программу с помощью
<exec>
задача вы можете сделать следующее:<exec executable="name-of-executable"> <arg value="arg0"/> <arg value="arg1"/> </exec>
то, что я сделал в конце концов, это сделать пакетный файл для извлечения пути к классам из файла ant, а затем запустить java непосредственно с помощью этого:
В моей сборке.XML-код:
<target name="printclasspath"> <pathconvert property="classpathProp" refid="project.class.path"/> <echo>${classpathProp}</echo> </target>
в другом скрипте под названием 'run.sh':
export CLASSPATH=$(ant -q printclasspath | grep echo | cut -d \ -f 7):build java "$@"
Это уже не кросс-платформенный, но, по крайней мере, он относительно прост в использовании, и можно было бы обеспечить .bat файл, который делает то же самое, что и run.sh это очень короткий пакетный скрипт. Это не похоже на перенос всей сборки в пакет для конкретной платформы файлы.
Я думаю, что это позор, что в ant нет какой-то опции, с помощью которой вы могли бы сделать что-то вроде:
ant -- arg1 arg2 arg3
mpirun использует этот тип синтаксиса; ssh также может использовать этот синтаксис, я думаю.