我使用的是ant,但if/then/else任务(ant-contrib-1.0b3.jar)有问题。我正在运行一些可以用下面的build.xml简化的东西。
我期待着从'ant -Dgiv=Luke‘那里获得消息
input name: Luke
should be overwritten with John except for Mark: John
但是属性"giv“似乎没有在if/then/else中被覆盖..
input name: Luke
should be overwritten with John except for Mark: Luke
这取决于我在${giv}
中使用等于任务的事实吗?否则,我的代码中出了什么问题?
build.xml代码:
<project name="Friend" default="ifthen" basedir=".">
<property name="runningLocation" location="" />
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="${runningLocation}/antlib/ant-contrib-1.0b3.jar" />
</classpath>
</taskdef>
<target name="ifthen">
<echo message="input name: ${giv}" />
<if>
<equals arg1="${giv}" arg2="Mark" />
<then>
</then>
<else>
<property name="giv" value="John" />
</else>
</if>
<echo message="should be overwritten with John except for Mark: ${giv}" />
</target>
</project>
发布于 2011-02-25 22:13:37
Ant属性很难覆盖(如果不是不可能的话)。您需要的是一个Variable。这些也是在Ant Contrib JAR中定义的。
编辑您的示例:
<target name="ifthen">
<var name="Evangelist" value="${giv}" />
<echo message="input name: ${Evangelist}" />
<if>
<equals arg1="${Evangelist}" arg2="Mark" />
<then>
</then>
<else>
<var name="Evangelist" value="John" />
</else>
</if>
<echo message="should be overwritten with John except for Mark: ${Evangelist}" />
</target>
发布于 2011-02-25 23:05:03
在Ant中,一个属性总是被设置一次,之后该变量就不能再改变了。
下面是一个使用标准Ant (没有ant-contrib
)的解决方案,它对那些不想要额外依赖的人很有用。
<target name="test" >
<echo message="input name: ${param}" />
<condition property="cond" >
<equals arg1="${param}" arg2="Mark" />
</condition>
</target>
<target name="init" depends="test" if="cond">
<property name="param2" value="Mark" />
</target>
<target name="finalize" depends="init">
<property name="param2" value="John" />
<echo message="should be overwritten with John except for Mark: ${param2}" />
</target>
发布于 2011-12-27 18:01:14
<project name="Friend" default="ifthen" basedir=".">
<property name="runningLocation" location="" />
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="${runningLocation}/antlib/ant-contrib-1.0b3.jar" />
</classpath>
</taskdef>
<target name="ifthen">
<echo message="input name: ${giv}" />
<if>
<equals arg1="${giv}" arg2="Mark" />
<then>
</then>
<else>
<var name="giv" unset="true"/>
<property name="giv" value="John" />
</else>
</if>
<echo message="should be overwritten with John except for Mark: ${giv}" />
</target>
</project>
我们也可以使用var
任务来取消设置该属性。
https://stackoverflow.com/questions/5116619
复制相似问题