Передача параметров командной строки ant в exec'd процесс ant? - PullRequest
2 голосов
/ 21 сентября 2009

Я использую ant для создания смеси кода Java и C ++ (JNI), которая составляет здесь клиентский проект. Недавно я переключил часть сборки C ++ на использование ant с cpptasks для сборки кода C ++ вместо того, чтобы ant вызывал различные версии Visual Studio, необходимые для сборки кода.

Чтобы заставить это работать, необходимо использовать задачу exec для запуска оболочки, в которой выполняется сценарий оболочки или командный файл, для настройки среды компилятора, прежде чем запускать другой муравей, выполняющий на основе cpptasks. C ++ build. По сути, связанные с C ++ задачи сборки в основном файле сборки ant выглядят так для Windows:

<target name="blah">
    <exec executable="cmd" failonerror="true">
      <arg value="/C"/>
      <arg line="&quot;${cpp.compiler.path}/vsvars32.bat&quot; &amp;&amp; %ANT_HOME%/bin/ant -f cpp-build.xml make-cpp-stuff" />
    </exec>
</target>

Невозможно избавиться от вызова vsvars32.bat, поскольку код должен быть собран с несколькими версиями VS и на машинах сборки, где ни одна из установок Visual Studio не может быть частью среды пользователя сборки.

Вышеописанное работает, но проблема, с которой я сталкиваюсь, заключается в том, что я хотел бы передать некоторые параметры командной строки (например, -verbose, -quiet, -emacs) дочернему муравью, если они были переданы родительскому. муравей. Можно ли вообще получить доступ к параметрам командной строки, данным родительскому муравью? Обратите внимание, что я говорю не об обычных определениях свойств, а о внутренних параметрах.

Ответы [ 2 ]

2 голосов
/ 21 сентября 2009
<target name="blah">
    <property environment="env"/>
    <exec executable="cmd" failonerror="true">
      <arg value="/C"/>
      <arg value="${cpp.compiler.path}/vsvars32.bat"/>
      <arg value="&amp;&amp;"/>
      <arg value="${env.ANT_HOME}/bin/ant.bat"/>
      <arg value="-f" />
      <arg value="cpp-build.xml" />
      <arg value="make-cpp-stuff" />
    </exec>
</target>

Добавление

Вы можете создать внешний пакетный файл, который будет запускать vsvars и ant, и тогда у вас будет только один процесс для создания. Я считаю, что && не работает так, как вы ожидаете:

run-ant-vs.bat:

....\vsvars32.bat
%ANT_HOME\bin\ant.bat -f cpp-build.xml make-cpp-stuff
1 голос
/ 21 сентября 2009

Я не уверен, может ли это помочь вам. Если для выполнения Java-клиента используется параметр, передаваемый при выполнении ant build, вы можете попытаться адаптировать этот пример (exec более универсален, чем java-задача, но имеет аналогичную концепцию)

Пример задачи Ant:

<target name="run">
  <java classname="my.package.Client" fork="true" failonerror="true">
    <arg line="-file ${specific.file}"/>
  </java>
</target>

Пример вызова:

ant run -Dspecific.file=/tmp/foo.txt
...