我希望包含一个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>
答案 0 :(得分:3)
您可以使用Antcall任务将depend
参数作为B
传递,而不是param
任务C。
<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>
编辑:正如Nico在评论中指出的那样,如果从A中取消设置该值,则不起作用。可以扩展答案以使用condition
任务将参数设置为空字符串。 / p>
<condition property="argToUseIfFromB" else="">
<isset property="extra_arg" />
</condition>
<java fork="true" ...>
<jvmarg .../>
<arg .../>
<arg .../>
<arg value="${argToUseIfFromB}"/>
</java>
进一步编辑:
由于我们无法将参数识别为可选参数,因此我们可以从每个父任务传递整个命令行。目标A
只会传递共同的论点; B
会通过额外的论证。 arguments上的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>