首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ant-contrib if/then/else任务

ant-contrib if/then/else任务
EN

Stack Overflow用户
提问于 2011-02-25 19:23:57
回答 5查看 62.8K关注 0票数 13

我使用的是ant,但if/then/else任务(ant-contrib-1.0b3.jar)有问题。我正在运行一些可以用下面的build.xml简化的东西。

我期待着从'ant -Dgiv=Luke‘那里获得消息

代码语言:javascript
运行
复制
input name: Luke
should be overwritten with John except for Mark: John

但是属性"giv“似乎没有在if/then/else中被覆盖..

代码语言:javascript
运行
复制
input name: Luke
should be overwritten with John except for Mark: Luke

这取决于我在${giv}中使用等于任务的事实吗?否则,我的代码中出了什么问题?

build.xml代码:

代码语言:javascript
运行
复制
<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>
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-25 22:13:37

Ant属性很难覆盖(如果不是不可能的话)。您需要的是一个Variable。这些也是在Ant Contrib JAR中定义的。

编辑您的示例:

代码语言:javascript
运行
复制
  <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>
票数 17
EN

Stack Overflow用户

发布于 2011-02-25 23:05:03

在Ant中,一个属性总是被设置一次,之后该变量就不能再改变了。

下面是一个使用标准Ant (没有ant-contrib)的解决方案,它对那些不想要额外依赖的人很有用。

代码语言:javascript
运行
复制
<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>
票数 34
EN

Stack Overflow用户

发布于 2011-12-27 18:01:14

代码语言:javascript
运行
复制
<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任务来取消设置该属性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5116619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档