Ant 可选蚂蚁参数
我想有一个蚂蚁arg值选择性地包括,而不必作出2个目标,这将基本上是相同的,除了额外的arg。例如:Ant 可选蚂蚁参数,ant,properties,arguments,Ant,Properties,Arguments,我想有一个蚂蚁arg值选择性地包括,而不必作出2个目标,这将基本上是相同的,除了额外的arg。例如: <target name="A" depends="C">...</target> <target name="B" depends="C">...</target> <target name="C"> <java fork="true" ...> <jvmarg .../>
<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>
。。。
...
...
#现在,如果依赖项来自,则不再有参数
#如果来自B
您可以使用任务将B
参数作为参数传递,而不是依赖于任务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>
进一步编辑:
由于我们无法将参数识别为可选参数,因此可以从每个父任务传入整个命令行。TargetA
只传递公共参数B
将传递一个额外的参数。蚂蚁手册对它的解释比我好
<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>
....
...
您可以尝试使用“除非”语句。我自己对ant有点陌生,所以不确定这是否适用于args,但对于许多任务来说确实如此。看起来:args.allset是一个属性,您可以在一个目标中定义为“true”,在另一个目标中定义为“false”,但这不起作用。当A调用C时,它将抛出一个错误,因为在该阶段没有定义额外的参数。当B调用C时效果很好。仍然没有。它的效果与您原来的一样。表示“”不是有效的参数。似乎即使它是空的,它仍然试图强制它作为参数。@Nico-在这种情况下,我们选择更简单的选项如何。将所有参数设置为C参数,只需传递a?中的一个子集,这可能就是答案。请编辑你的答案,然后我会接受它的正确性。我也找不到别的办法。
<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>