Используйте Ant для запуска программы с аргументами командной строки - PullRequest
55 голосов
/ 17 сентября 2010

Моя программа получает аргументы командной строки.Как я могу передать его, когда я использую Ant?

Ответы [ 5 ]

71 голосов
/ 17 сентября 2010

Расширение Ричард Кук ответ.

Вот задача 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.

27 голосов
/ 11 февраля 2012

Если вы не хотите обрабатывать отдельные свойства для каждого возможного аргумента, я предлагаю вам использовать:

<arg line="${args}"/>

Вы можете проверить, не установлено ли свойство, используя конкретную цель с unless attribute и inside do:

<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'

Первые две командыбудет запрашивать аргументы командной строки, тогда как последний не будет.

11 голосов
/ 17 сентября 2010

Единственный эффективный механизм передачи параметров в сборку - это использование свойств 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>
4 голосов
/ 17 сентября 2010

Можете ли вы быть более точным в отношении того, что вы пытаетесь сделать и как вы пытаетесь это сделать?

Если вы пытаетесь вызвать программу, используя задачу <exec>, которую выможет сделать следующее:

<exec executable="name-of-executable">
  <arg value="arg0"/>
  <arg value="arg1"/>
</exec>
0 голосов
/ 12 октября 2012

В конце концов я создал пакетный файл для извлечения CLASSPATH из ant-файла, затем запустил java напрямую, используя:

В моем build.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 также может использовать этот синтаксис, я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...