我想在某些条件下执行subant。类似的东西:
<if>
<equals value="value1" property="${some.property">
<then>
<subant target="@{target}" failonerror="true" inheritall="false">
<buildpath refid="some-ref1" />
</subant>
</then>
<else>
<subant target="@{target}" failonerror="true" inheritall="false">
<buildpath refid="some-ref2" />
</subant>
</else>
</if>
但找不到办法去做。阅读ant手册并使用Google搜索,但未找到解决方案。
感谢。
答案 0 :(得分:1)
我相信错误可能在你的equals标签上。不要使用'value'和'propery'属性,尝试使用'arg1'和'arg2',即:
<equals arg1="value1" arg2="${some.property}">
查看ant-contrib doc中的示例:http://ant-contrib.sourceforge.net/tasks/tasks/if.html。
如果问题是你的'if','then'和/或'else'标签没有正确解析,那么你可能会错过ant-contrib库。 ant-contrib本身不包含在ant中,但您可以在此处下载:http://sourceforge.net/projects/ant-contrib/files/
根据ant-contrib网站(http://ant-contrib.sourceforge.net/),以下是安装ant-contrib所必须做的事情:
选项1:将ant-contrib-0.3.jar复制到Ant安装的lib目录中。如果要在自己的项目中使用其中一个任务,请添加行
<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
到你的构建文件。
选项2:将ant-contrib-0.3.jar保存在一个单独的位置。你现在必须明确地告诉Ant在哪里找到它(比如在/ usr / share / java / lib中):
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="/usr/share/java/lib/ant-contrib-0.3.jar"/>
</classpath>
</taskdef>
答案 1 :(得分:0)
请查看<target if="${some.property}>
。您可能希望其他目标具有unless
。
如果该属性与现有文件有关,请参阅Ant task to check a file exists?。即使这不是您的主要关注点,我相信您可以从接受的答案中获得想法。
答案 2 :(得分:0)
你的意思是打电话给另一个目标 如果是这样的话
<if>
<equals value="value1" property="${some.property">
<then>
<antcall target="@{target}" failonerror="true" inheritall="false">
</then>
<else>
<antcall target="@{target}" failonerror="true" inheritall="false">
</else>
</if>