Необязательный Ant Arg - PullRequest
       18

Необязательный Ant Arg

6 голосов
/ 25 февраля 2011

Я бы хотел, чтобы опционально было включено значение ant arg без необходимости делать 2 цели, которые были бы в основном одинаковыми, за исключением дополнительного arg.Например:

<target name="A" depends="C">...</target>

<target name="B" depends="C">...</target>

<target name="C">
    <java fork="true" ...>
        <jvmarg .../>
        <arg .../>
        <arg .../>
        ...
        # now, if the dependency is from A, no more args
        # if from B
            <arg value="xxx"/>
    </java>
</target>

1 Ответ

3 голосов
/ 25 февраля 2011

Вместо depend в задаче C вы можете использовать задачу Antcall , чтобы передать аргумент B как param.

<target name="A" >
  <antcall target="C" />
  ....
</target>

<target name="B" >
  <antcall target="C" >
    <param name="extra_arg" value="xxx" />
  </antcall>
  ...
</target>

<target name="C">
    <java fork="true" ...>
        <jvmarg .../>
        <arg .../>
        <arg .../>
        <arg value="${extra_arg}"/>
    </java>
</target>

РЕДАКТИРОВАТЬ: Как Нико указывает в комментарии, это не работает, если значение не установлено из A. Ответ может быть расширен, чтобы использовать задачу condition для установки аргумента в нулевую строку.

<condition property="argToUseIfFromB" else="">
  <isset property="extra_arg" />      
</condition>
<java fork="true" ...>
    <jvmarg .../>
    <arg .../>
    <arg .../>
    <arg value="${argToUseIfFromB}"/>
</java>

ДАЛЬНЕЙШЕЕ РЕДАКТИРОВАНИЕ: Поскольку мы не можем получить аргументы для распознавания как необязательные, мы можем передать всю командную строку из каждой родительской задачи. Цель A будет передавать только общие аргументы; B пройдет через дополнительный аргумент. Руководство Ant по аргументам объясняет это лучше меня.

<target name="A" >
  <antcall target="C">
    <param name="java_args" value="arg_a arg_b" /> 
  </antcall>
  ....
</target>

<target name="B" >
  <antcall target="C" >
    <param name="java_args" value="arg_a arg_b extra_arg" />
  </antcall>
  ...
</target>

<target name="C">
    <java fork="true" ...>
        <jvmarg .../>
        <arg line="${java_args}"/>
    </java>
</target>
...