有条件的

时间:2011-04-26 17:11:02

标签: ant

我想在某些条件下执行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搜索,但未找到解决方案。

感谢。

3 个答案:

答案 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>