Nic*_*men 6 ant arguments properties
我希望可以选择包含一个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>
Run Code Online (Sandbox Code Playgroud)
您可以depend使用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>
Run Code Online (Sandbox Code Playgroud)
编辑:正如 Nico 在评论中指出的那样,如果未从 A 中设置值,则这不起作用。答案可以扩展为使用任务condition将参数设置为空字符串。
<condition property="argToUseIfFromB" else="">
<isset property="extra_arg" />
</condition>
<java fork="true" ...>
<jvmarg .../>
<arg .../>
<arg .../>
<arg value="${argToUseIfFromB}"/>
</java>
Run Code Online (Sandbox Code Playgroud)
进一步编辑:由于我们无法将参数识别为可选,因此我们可以从每个父任务传递整个命令行。TargetA只会传递常见的参数;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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5027 次 |
| 最近记录: |