`
lgstarzkhl
  • 浏览: 335351 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

在Ant中使用逻辑判断 Condition

阅读更多
而在ant中处理逻辑判断真是麻烦,只能作用于task,要利用property来做判断,使用available来设置property。例如:

<?xml version="1.0" encoding="GB2312"?>
<project name="weblogic ant task" default="build">
<target name="detect.file"   >  
  <condition property="fileIsExists"   >  
  <and>  
   <available file="c:/123.txt"/>
  </and>  
  </condition>
</target>
<target name="echoDemo" if="fileIsExists" depends="detect.file">  
  <echo message="hello ant"/>
</target>
<target name="build">  
  <antcall target="echoDemo"/>
</target>
</project>
上面判断一个文件,如果存在的话 fileIsExists 就为true,echoDemo这个task在执行前会先判断fileIsExists 是否为true如果不为true就不执行了。c盘下面有123.txt的话会打印hello ant 否则不会打印。
这里面还有一个小陷阱,我习惯使用antcall,不喜欢使用depends,但是使用antcall的话就会有问题,例如我最开始这么写的,就不行。

<?xml version="1.0" encoding="GB2312"?>
<project name="weblogic ant task" default="build">
<target name="detect.file">  
  <condition property="fileIsExists">  
  <and>  
   <available file="c:/123.txt"/>
  </and>  
  </condition>
</target>
<target name="echoDemo" if="fileIsExists">  
  <echo message="hello ant"/>
</target>
<target name="build">  
  <antcall target="detect.file"/>
  <antcall target="echoDemo"/>
</target>
</project>

使用antcall的话在echoDemo这个task执行的时候fileIsExists这个属性永远不为true,即便在执行完detect.file后它已经为true了。

下面是ant的官方参考文档

更复杂的可以参考

http://ant.apache.org/manual/CoreTasks/conditions.html

Condition
Description
Sets a property if a certain condition holds true - this is a generalization of Available and Uptodate.

If the condition holds true, the property value is set to true by default; otherwise, the property is not set. You can set the value to something other than the default by specifying the value attribute.

Conditions are specified as nested elements, you must specify exactly one condition.

Parameters
Attribute Description Required
property The name of the property to set. Yes
value The value to set the property to. Defaults to "true". No
else The value to set the property to if the condition evaluates to false. By default the property will remain unset. Since Ant 1.6.3  No


Parameters specified as nested elements
All conditions to test are specified as nested elements, for a complete list see here.

Examples
  <condition property="javamail.complete">
    <and>
      <available classname="javax.activation.DataHandler"/>
      <available classname="javax.mail.Transport"/>
    </and>
  </condition>
sets the property javamail.complete if both the JavaBeans Activation Framework and JavaMail are available in the classpath.

  <condition property="isMacOsButNotMacOsX">
    <and>
      <os family="mac"/>

      <not>
        <os family="unix"/>

      </not>
    </and>
  </condition>
sets the property isMacOsButNotMacOsX if the current operating system is MacOS, but not MacOS X - which Ant considers to be in the Unix family as well.

  <condition property="isSunOSonSparc">
    <os name="SunOS" arch="sparc"/>

  </condition>
sets the property isSunOSonSparc if the current operating system is SunOS and if it is running on a sparc architecture.


1、istrue isfalse:断言 真 假
<project name="testCondition">
    <target name="test">
        <condition property="scondition">
            <istrue value="true"/>                   
        </condition>
        <antcall target="isTrue"></antcall>
        <antcall target="isFalse"></antcall>       
    </target>
    <target name="isTrue" if="scondition">
        <echo>is ture</echo>
    </target>
    <target name="isFalse" unless="scondition">
        <echo>is false</echo>
    </target>
</project>

  2、逻辑运算
    2.1、not 逻辑非
<project name="testCondition">
    <target name="test">
        <condition property="scondition">
            <not>
                <istrue value="true"/>                   
            </not>
        </condition>
        <antcall target="isTrue"></antcall>
        <antcall target="isFalse"></antcall>       
    </target>
    <target name="isTrue" if="scondition">
        <echo>is ture</echo>
    </target>
    <target name="isFalse" unless="scondition">
        <echo>is false</echo>
    </target>
</project>
    2.2、and 逻辑与
<project name="testCondition">
    <target name="test">
        <condition property="scondition">
            <and>
                <istrue value="true"/>
                <istrue value="false"/>                   
            </and>
        </condition>
        <antcall target="isTrue"></antcall>
        <antcall target="isFalse"></antcall>       
    </target>
    <target name="isTrue" if="scondition">
        <echo>is ture</echo>
    </target>
    <target name="isFalse" unless="scondition">
        <echo>is false</echo>
    </target>
</project>
    2.3、or 逻辑或 xor异或 (语法上与and类似)
4、isset 指定属性是否存在
<project name="testCondition">
    <!--属性也可以通过ant参数-D来设置-->
    <property name="name" value="this is name"/>   
    <target name="test">
        <condition property="scondition">
            <!--如果属性name不存在则返回false-->
            <isset property="name"/>
        </condition>
        <antcall target="isTrue"></antcall>
        <antcall target="isFalse"></antcall>       
    </target>
    <target name="isTrue" if="scondition">
        <echo>is ture</echo>
    </target>
    <target name="isFalse" unless="scondition">
        <echo>is false</echo>
    </target>
</project>
    5、equals 是否相等
<project name="testCondition">
    <!--属性也可以通过ant参数-D来设置-->
    <property name="name" value="this is name"/>   
    <target name="test">
        <condition property="scondition">
            <!--如果arg1的值与arg2的值相等返回true,否则为false-->
            <equals arg1="${name}" arg2="this is name"/>
        </condition>
        <antcall target="isTrue"></antcall>
        <antcall target="isFalse"></antcall>       
    </target>
    <target name="isTrue" if="scondition">
        <echo>is ture</echo>
    </target>
    <target name="isFalse" unless="scondition">
        <echo>is false</echo>
    </target>
</project>   
    6、filesmatch 比较文件
<project name="testCondition">       
    <target name="test">
        <condition property="scondition">
            <!--如果file1所代表的文件与file2所代表的文件相等返回true,否则为false-->
            <filesmatch file1="testfile1.txt" file2="testfile2.txt"/>
        </condition>
        <antcall target="isTrue"></antcall>
        <antcall target="isFalse"></antcall>       
    </target>
    <target name="isTrue" if="scondition">
        <echo>is ture</echo>
    </target>
    <target name="isFalse" unless="scondition">
        <echo>is false</echo>
    </target>
</project>
  • Ant.pdf (414.3 KB)
  • 下载次数: 34
分享到:
评论
1 楼 uof 2011-09-16  
antcall 需要指定 inheritRefs=“yes”,才能传递其他target中的引用,而properties是默认传递的。

相关推荐

    apache-ant-1.5.2

    6. **条件(Condition)**:条件元素允许在Ant构建中进行逻辑判断,如检查文件是否存在、属性是否被设置等。 在“apache-ant-1.5.2”版本中,编译Ant可能涉及到以下步骤: 1. 获取源代码,通常从Apache官方仓库...

    apache-ant-1.10.12-bin.zip

    通过下载并解压“apache-ant-1.10.12-bin.zip”,你可以开始在Java项目中使用Ant进行编译、打包和其他构建任务。理解Ant的基本概念和组件对于任何Java开发者来说都是必要的,因为它可以帮助你有效地管理和自动化项目...

    ant contrib if jar包

    为了在Ant项目中使用这个库,你需要将下载的ant-contrib.jar文件添加到Ant的类路径中,然后就可以在你的构建脚本中自由地使用这些条件语句了。 在解压下载的"ant-contrib"压缩包后,你会看到jar文件和其他可能的...

    Ant实战(第2版)

    在Ant中,可以通过属性(property)来引用定义好的变量值,也可以设置条件判断(condition)和循环(for、while等)来控制构建过程。这样的配置方式极大地方便了构建过程的管理和维护。 在实际项目中,一个典型的...

    Ant详细配置总结

    - **条件判断**:使用`&lt;condition&gt;`标签结合`&lt;if&gt;`和`&lt;unless&gt;`标签可以实现条件执行任务。 - **循环结构**:通过`&lt;foreach&gt;`标签可以对一组文件或目录执行相同的操作。 - **扩展任务**:除了内置的任务之外,还可以...

    ant打包编译全套资料

    8. **脚本支持**:Ant支持使用Java、JavaScript、Groovy等脚本语言编写复杂逻辑。 9. **外部工具集成**:如通过`&lt;exec&gt;`标签调用外部命令行工具,如JUnit进行测试。 10. **Eclipse集成**:在Eclipse中配置Ant,创建...

    apache-ant-1.8.1

    7. **脚本支持**:Ant允许在任务中嵌入Java、JavaScript或Groovy等脚本,使得构建过程更灵活,可以执行更复杂的逻辑。 8. **外部资源引用**:在`build.xml`中,可以使用相对路径或绝对路径引用项目中的文件和目录,...

    ApacheAnt中文手册.pdf

    Apache Ant 是一个强大的构建工具,尤其在Java开发领域中广泛使用。它是一个基于Java的工具,设计目的是为了克服传统编译工具如make的局限性,尤其是跨平台的问题。Ant通过XML格式的构建文件(通常命名为build.xml)...

    Ant自动构建总结

    Ant使用XML来描述项目结构和构建过程,使得构建任务可以在不同的环境中重复执行,无需关心具体的操作系统或开发工具。这个压缩包中包含的`build.xml`文件就是Ant的构建脚本,用于定义构建任务、依赖关系和目标。 1....

    Ant资料大全

    - `&lt;condition&gt;`元素可以用于条件判断,只有满足条件时,相关的目标才会被执行。 5. **文件集(Filesets)** - 文件集是一种选择一组文件的方式,它可以应用于许多任务,如编译、复制或删除。 - `&lt;fileset&gt;`元素...

    超强ant学习资料

    4. **条件(Condition)**:Ant提供了一系列条件判断,如文件是否存在、版本比较等,可以决定是否执行某个任务或目标。 二、Ant的使用步骤 1. **创建build.xml**:根据项目需求,编写XML格式的构建文件,定义目标...

    分享一个项目的Ant脚本配制

    标题中的“分享一个项目的Ant脚本配置”表明我们将探讨的是如何使用Apache Ant工具来构建和管理Java项目。Ant是开源的构建工具,广泛应用于Java项目,它可以自动化编译、打包、测试等开发流程。 在描述中提到的...

    Ant学习资料

    5. **文件集(Fileset)**:文件集是Ant处理文件和目录的一种方式,它可以指定一组文件和目录,然后在任务中使用。文件集可以通过各种条件(如通配符、排除规则等)进行过滤。 6. **路径(Path)**:路径元素用于...

    ant入门加高级查询文档

    《Ant入门加高级查询文档》是一本全面介绍Apache Ant的宝贵资源,涵盖了从基础到高级的各类主题。Ant是Java项目构建系统,它通过XML定义的任务来自动...在Java世界中,熟悉和掌握Ant的使用,对于提升开发效率至关重要。

    关于Ant多渠道批量打包总结

    3. ****: 定义或引用属性,用于存储值并在构建过程中使用。 4. **&lt;condition&gt;**: 判断语句,根据条件执行特定任务。 5. ****: 循环结构,可以遍历列表或集合,对每个元素执行某项操作。 **多渠道打包步骤** 1. **...

    ProgrammersGuide

    规则绑定允许将规则中的元素与外部数据或上下文关联,而规则表达式则提供了计算和逻辑判断的能力,使规则能够根据运行时的状态动态调整行为。 ### 规则条件与动作 规则条件定义了规则触发的先决条件,而规则动作则...

    WAS自动部署技术总结

    Ant支持条件语句,可以在构建过程中基于某些条件执行不同的任务。 ```xml &lt;condition property="os.name" value="Windows"&gt; &lt;/condition&gt; ``` ##### 3. Target的条件判断与逻辑 使用`if`和`unless`属性来控制`...

    python相关知识的思维导图

    布尔运算符有`and`、`or`和`not`,用于逻辑判断。例如,`10 &gt; 30`的结果是False。 Python的关键字和保留字,如`if`、`while`、`for`、`as`、`import`、`input`、`print`和`range`,在编程时有特定含义,不能作为...

Global site tag (gtag.js) - Google Analytics