如何在Ant任务的if条件中检查两个属性?

时间:2014-01-23 13:46:17

标签: ant

可以通过指定ifunless子句有条件地执行Ant目标。据我所知,这个子句只接受一个属性。如何检查两个属性?

这是一个例子:

<project default="test">
  <property name="a" value="true"/>
  <property name="b" value="true"/>
  <target name="test-a" if="a">
    <echo>a</echo>
  </target>
  <target name="test-b" if="b">
    <echo>b</echo>
  </target>
  <target name="test-ab" if="a,b">
    <echo>a and b</echo>
  </target>
  <target name="test" depends="test-a,test-b,test-ab"/>
</project>

如果我运行它,test-ab目标不会产生输出:

$ ant -f target-if.xml
Buildfile: target-if.xml

test-a:
     [echo] a

test-b:
     [echo] b

test-ab:

test:

BUILD SUCCESSFUL
Total time: 0 seconds

如何为两个属性指定和表达式?

2 个答案:

答案 0 :(得分:2)

不幸的是,没有。 From the ant Targets manual:

  

在if / unless子句中只能指定一个属性名。如果你   想要检查多个条件,您可以使用dependend目标   计算检查结果:

<target name="myTarget" depends="myTarget.check" if="myTarget.run">
    <echo>Files foo.txt and bar.txt are present.</echo>
</target>

<target name="myTarget.check">
    <condition property="myTarget.run">
        <and>
            <available file="foo.txt"/>
            <available file="bar.txt"/>
        </and>
    </condition>
</target>

答案 1 :(得分:2)

这是我使用条件元素的例子:

<project default="test">
  <property name="a" value="true"/>
  <property name="b" value="true"/>
  <target name="test-a" if="a">
    <echo>a</echo>
  </target>
  <target name="test-b" if="b">
    <echo>b</echo>
  </target>
  <condition property="a-and-b">
    <and>
      <equals arg1="${a}" arg2="true"/>
      <equals arg1="${b}" arg2="true"/>
    </and>
  </condition>
  <target name="test-ab" if="a-and-b">
    <echo>a and b</echo>
  </target>
  <target name="test" depends="test-a,test-b,test-ab"/>
</project>