评注: 用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 转载请保留此声明, 谢谢!! ]

转载于:https://www.cnblogs.com/jhj117/p/5626109.html

转: ant condition使用相关推荐

  1. jenkins+ant+jmeter接口测试

    <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl=" ...

  2. apache ant 安装_SAP Hybris使用recipe进行安装时,是如何执行ant命令的?

    打开Hybris安装文件夹下的recipes,随便打开一个recipe的build.gradle文件,发现使用了installer-platform-plugin和installer-addon-pl ...

  3. Ant 条件判断 if

    转载自ant 条件判断 condition 最近收到一个ticket,用ant写个build.xml,用到condition,作笔记如下:  basic elements: istrue isfals ...

  4. Ant编译编译APK、打包打包JS

    Ant编译编译APK.打包打包JS Base on Apache Ant 1.8.4 一.Apache Ant 维基百科:http://zh.wikipedia.org/wiki/Apache_Ant ...

  5. 从源码角度深入分析ant

    Ant的基本概念 首先是ant的基本概念:Project,Target,Tasks,Properties,Paths 1.Project <project> build.xml文件最顶层的 ...

  6. ant编译重设property的值

    引自:http://qiang106.iteye.com/blog/2097833 ant已经有N多种替代方案了,但也不是ant就没有可用之外了,它的跨平台性还是有很大的优势. android就经 ...

  7. ant的if-else

    ant中的条件判断实例: ant中条件判断这里有2种形式,一种是运用 target 的if and unless attributes,一种是运用ant-contrib中的if else. 第一种: ...

  8. Eclipse配置工程自动执行ant实现热部署

    思路:配置 Eclipse 自动执行一个Ant脚本,在Ant脚本内自己定义热部署的步骤,这样在每个文件更新后就可以自动部署到服务的目录中了. 一.配置Eclipse 工程自动执行一个Ant 脚本. 1 ...

  9. SAP Hybris使用recipe进行安装时,是如何执行ant命令的?

    打开Hybris安装文件夹下的recipes,随便打开一个recipe的build.gradle文件,发现使用了installer-platform-plugin和installer-addon-pl ...

最新文章

  1. JS的Event属性和方法
  2. 学习旧岛小程序 (5) observer 函数中修改属性的值
  3. biosrecovery什么意思_BIOS中的每个中文是什么意思
  4. Maven 建立父子项目和跨项目调用内容的步骤
  5. 浅谈Linq to Sql 的不足
  6. [Project Euler] Problem 26
  7. ztree 后台异步加载_zTree异步加载实现
  8. Matlab伯德图如何修改相频特性的角度?终于解决了!
  9. 南开大学c语言100题,计算机二级C语言上机(南开大学)100题.doc
  10. 中国SaaS驶入「2.0时代」
  11. java常问面试题总结
  12. 京东app连接电脑上访问突然跳转不到电脑版网页
  13. python html文本转为text文本
  14. 宽带连接错误的处理办法
  15. Gradle编译生成不同的版本,动态设定应用标题 / 应用图标 / 替换常量
  16. Trustonic,Rubean和CCV宣布合作开发mPOS(移动销售终端)解决方案以实现商用设备上的密码安全输入
  17. ES集群重新设置密码(第二次执行.elasticsearch-setup-passwords interactive报错)
  18. PlantUML integration
  19. 黄聪:Windows7立体声混音设置方法(stereo mix)(转)
  20. MongoDB下载安装与测试连接(windows)

热门文章

  1. caffe路径正确,却读不到图片
  2. 深入浅出:HTTP/2
  3. Windows10电脑系统时间校准
  4. 记录一次spark连接mysql遇到的问题
  5. swift基础学习(八)
  6. 二叉树的基本操作及应用(三)
  7. 《树莓派实战秘籍》——1.17 技巧17添加重启按钮
  8. 例子:好友列表选中效果
  9. 【转】Java删除文件夹和文件
  10. 解释spring,struts,hibernate优缺点