转: ant condition使用
评注: 用c语言的方式来,比喻ant...比较好理解
转: http://www.smithfox.com/?e=176
[备忘] Apache Ant中的逻辑判断
[原创链接: http://www.smithfox.com/?e=176 转载请保留此声明, 谢谢!! ]
在写Ant时有时免不了要简单的逻辑, 本文并没有创造什么新的好办法, 只是着眼于将一些 "似懂非懂" 的概念理清一下.
相信第一次遇到这样的问题时, 你一定能搜索到很多的内容, 零散的concept进入了你的脑中: condition, if, else, else if, then, unless, avaliable, ant-contrib.
先不管这些, 看一段 程序员都能看懂的代码:
- function test():void {
- if( (a!=null && b=="hello") || ( fileExist("/good.txt") ) ) {
- printf("11111");
- } else {
- printf("33333");
- }
- }
很显然上面这段代码很难直接体现在 Ant这样以XML为载体的描述式脚本中, 再改造一下:
- function test():void {
- var flag:Boolean = conditaion( or( and(a!=null,b=="hello"), fileExist("/good.txt") ) );
- if( flag ) {
- printf("11111");
- } else {
- printf("33333");
- }
- }
为什么要这样改造, 因为对应的Ant是这样写的:
- <?xml version="1.0" encoding="UTF-8"?>
- <project name="anttest" default="printf11111">
- <!-- 这个Ant Project的默认target是printf11111, 为了使Ant能自动调用 printf33333将 printf33333 放到它的 depends -->
- <target name="printf1111" depends="getflag, printf33333" if="flag">
- <echo message="11111"/>
- </target>
- <target name="printf33333" depends="getflag" unless="flag">
- <echo message="33333"/>
- </target>
- <target name="getflag">
- <condition property="flag">
- <or>
- <and>
- <isset property="a"/>
- <equals arg1="${b}" arg2="hello" />
- </and>
- <available file="/good.txt" type="file"/>
- </or>
- </condition>
- </target>
- </project>
你肯定会有两点感受: 一是,觉得这个真的很啰嗦, 二是, 这么多的新出来的字眼, 我到哪去找呀?
好吧, 先解决第二个问题, 给几个链接:
http://ant.apache.org/manual/Tasks/conditions.html
http://ant.apache.org/manual/targets.html
再看第一个问题, 在啰嗦中找点规律:
1. Ant的逻辑分支的粒度是 target, 因为 if 和 unless(作用相当于else) 是 target的属性
2. Ant的逻辑体现在 property(相当于变量)上, 因为 if 和 unless 只接受 property
3. condition这个task, 是逻辑组合器, 它的作用相当于: var flag:Boolean = (xxx);
你会发现写一个这么简单的东东, 都要搞好几个target, 主要还是因为: "Ant的逻辑分支持粒度是 target", 在Ant中比target小的粒度是 task, 那有没有task级别的 逻辑分支呢? 这时候 ant-contrib 就华丽登场了.
其实ant-contrib 重用了 Ant的conditions(不是condition task), 而废弃了 condition 这个 task, 代之以 if, else, elseif再加then 这样的task.
用 ant-conrib的例子如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <project name="anttest" default="print">
- <property name="a" value="somevalue"/>
- <property name="b" value="hello"/>
- <taskdef resource="net/sf/antcontrib/antlib.xml" classpath="${basedir}/ant-contrib-1.0b3.jar" />
- <target name="print">
- <if>
- <or>
- <and>
- <isset property="a"/>
- <equals arg1="${b}" arg2="hello" />
- </and>
- <available file="/good.txt" type="file"/>
- </or>
- <then>
- <echo message="11111" />
- </then>
- <else>
- <echo message="33333" />
- </else>
- </if>
- </target>
- </project>
你会发现用ant-contrib比直接用 ant内置的简洁多了, 而且可读性也增强了. 这主要是因为, if, else 这样的逻辑分支已经是 ant task 级别了.
[原创链接: http://www.smithfox.com/?e=176 转载请保留此声明, 谢谢!! ]
转: ant condition使用的更多相关文章
- ant的condition任务
1.istrue isfalse:断言 真 假 <project name="testCondition"> <target name="test&qu ...
- jenkins / ant / jmeter 持续集成接口自动化
1. 将 jmeter 脚本放在/var/lib/jenkins/workspace/Jmeter_auto/jmxpath路径下 2. 点击http://jk.facebank.net.cn/job ...
- 关于 ant 不同渠道自动打包的笔记
必要的java.android.ant文件及循环打包用到的ant的jar 下载Ant(这里的Ant不是eclipse和android SDk里面自带的ant) 官方下载地址:http://a ...
- Ant 命令行编译Android项目
首先把android sdk下的tools目录加到系统path环境变量里, 要么就得直接指定android.bat的绝对路径 对于一个新项目, 可以用这个命令创建需要的ant编译环境(可以看到andr ...
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
原创文章,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4535459.html android 程序打包成apk,如果在是命令行方式,一般都要经过如下步骤: 1.用a ...
- 在Android开发中使用Ant 二:进行一次完整的打包
一次完整的Android打包要进行以下的几步:编译.代码混淆.打包apk.签名apk.apk优化. 为了能包涵使用NDK的情况,在这里使用一个有native代码的工程TestJni. 在工程根目录下新 ...
- 在Android开发中使用Ant 一:环境的搭建及入门
配置Ant环境 下载Ant:http://ant.apache.org/bindownload.cgi 在windows上应该选择zip压缩包,将zip压缩包解压到一个目录. 打开系统环境变量,在系统 ...
- ant exec
http://ant.apache.org/manual/Tasks/exec.html Exec Description Executes a system command. When the os ...
- Ant Tasks 使用总结
xmlproperty http://ant.apache.org/manual/Tasks/xmlproperty.html Ant的xmlproperty的Task能直接读取一个xml文件以生成相 ...
随机推荐
- 利用Retrofit, RxJava获取网络内容
Retrofit & RxJava 关于如何使用Retrofit和RxJava请阅读参考中的两篇文章. Retrofit处理数据 Retrofit是在什么时候处理从网络中获取到的json数据的 ...
- C# 绘制统计图(柱状图, 折线图, 扇形图)
统计图形种类繁多, 有柱状图, 折线图, 扇形图等等, 而统计图形的绘制方法也有很多, 有Flash制作的统计图形, 有水晶报表生成统计图形, 有专门制图软件制作, 也有编程语言自己制作的:这里我们用 ...
- eclipse提示servlet不存在 的解决办法
在以前的版本中,Tomcat的common/lib目录下有一个名为servlet-api.jar的包,把它拷贝至你的java安装目录下jre/lib/ext下就可以了. 如果是:tomcat6就在To ...
- Flex4 DataGrid ItemRenderer内嵌方式
Flex4 DataGrid ItemRenderer像Flex3一直内嵌ItemRenderer会报空对象引用的错误,如: <s:GridColumn dataField="titl ...
- 远程调用WMI安装软件
Invoke-WMIMethod -ComputerName $ip -Credential $cred -path Win32_product -Name Install -ArgumentLi ...
- 用java发送邮件(黄海已测试通过)
/** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...
- 理解reserve与resize
1.首先明白capacity与size的概念,capacity表示当前可以容纳多少个元素,size表示当前有多少个元素.为了避免频繁地分配内存,vector预留了一些内存.也就是说:size<= ...
- C#生成软件注册码
开发软件时,当用到商业用途时,注册码与激活码就显得很重要了.现在的软件破解技术实在在强了,各种国内外大型软件都有注册机制,但同时也不断地被破解.下面发的只是一个常用版本,发出源码被破就更容易了,但我们 ...
- grep经常使用使用方法
grep简单介绍 正如linux的man文件里所描写叙述的那样: grep searches the named input FILEs (or standard input if no files ...
- iOS 2D绘图详解(Quartz 2D)之阴影和渐变(Shadow,Gradient)
前言:这个系列写道这里已经是第五篇了,本文会介绍下阴影和渐变的基础知识,以及一些基本的Demo Code展示,应该还会有两篇,介绍下Bitmap绘制以及Pattern等知识. Shadow shado ...