Вместо 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>