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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Epoll在LT和ET模式下的读写方式

From: http://www.ccvita.com/515.html 在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK) 从字面上看, 意思是:EAGAIN: 再试一次&#xff0c;EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block&#xff0c;perror输出: Res…

react 创建

1&#xff1a;可以html页直接引入 <script src"../build/react.development.js"></script><script src"../build/react-dom.development.js"></script><script src"../build/babel.min.js"></script> 2&a…

《精彩绝伦的CSS》读书笔记(二)

3.2 大多数允许使用多个关键字的CSS属性都允许以任何顺序书写关键字,但font属性是很少见的例外之一.font: <font-size> <font-family>;这连个只必须按照既定的顺序进行书写,如果顺序颠倒或者漏掉了其中一个,浏览器会完全忽略这条声明. 其他关键字全部都得放在这两个…

Session机制详解

虽然session机制在web应用程序中被采 用已经很长时间了&#xff0c;但是仍然有很多人不清楚session机制的本质&#xff0c;以至不能正确的应用这一技术。本文将详细讨论session的工作机制并且对在 Java web application中应用session机制时常见的问题作出解答。 一、术语ses…

element-ui的表单校验;el-form表单校验;el-form表单自定义校验;手机号校验;车牌号校验;车牌号正则校验;手动校验表单某一项;手动清空表单的某一项校验结果

示例&#xff1a;代码在末尾 可以直接复制使用 一、基本属性认知&#xff1a; 1. required: true 会有 * &#xff0c; 但仅是触发最后点击提交按钮时&#xff0c;校验某一项位必填&#xff1b;与输入事件或者选择或者失焦时候 怎么校验无关 &#xff08;这时候的校验取决于是…

npm eject 暴露webpack报错,less或sass添加报错

在使用react时候&#xff0c;添加sass或者less&#xff0c;需要暴露config里的webpack出来&#xff0c;直接npm eject会暴以下错&#xff1b; Usage: npm <command> where <command> is one of: access, adduser, audit, bin, bugs, c, cache, ci, cit, …

Eclipse For JavaSE安装、配置、测试

Eclipse For JavaSE安装、配置、测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.安装与配置 4.JavaSE开发测试 5.ADT安装与Android开发测试 6.注意事项 7.相关博文 >>看不清的图片可在新标签打开查看大图 1.概述 eclipse应该是Java开发界家喻户晓的IDE了&#xff0c;通…

关于GNS3占用很大CPU的问题,很大可能对你有用

在用GNS3的时候不知道为什么&#xff0c;CPU居高不下&#xff0c;占据100%&#xff0c;拼命计算IDLE值&#xff0c;甚至使用上了BES软件&#xff0c;都没用&#xff0c;后来在51CTO看到有个朋友回帖说是更改一下RAM应该可以。我发现GNS3给每台设备默认是分配128M&#xff0c;于…

Typescript学习;Typescript总结;Typescript 的数据类型有哪些?

推荐一个学习Typescript的网址&#xff0c;写的特别清晰易懂&#xff0c;比官网好理解&#xff1a;Typescript文档整理 一个总结&#xff1a;Typescript 的数据类型有哪些

epoll的两种模式

From: http://haoningabc.iteye.com/blog/1432958 linux异步IO浅析 http://hi.baidu.com/_kouu/blog/item/e225f67b337841f42f73b341.html epoll有两种模式,Edge Triggered(简称ET) 和 Level Triggered(简称LT).在采用这两种模式时要注意的是,如果采用ET模式,那么仅当状态发生…

react 添加less预处理语言

首先是安装react react创建 创建完了&#xff0c;添加react 首先cnpm i less less-loader --save-dev 下载完成后执行&#xff1a;npm run eject&#xff1b;暴露config等一些配置文件 config目录有个webpack配置文件&#xff0c;修改 const cssRegex /\.css$/; 改成 con…

微软公布 Windows Phone 8 多项新特性

多款热门游戏登陆WP8 全新锁屏界面可浏览Facebook图集 数据压缩服务DATA SENSE 鲍尔默宣布WP8终端上市细则 10月30日消息&#xff0c;微软今日凌晨于美国旧金山公布Windows Phone 8诸多新特性&#xff0c;并宣布了诺基亚、HTC以及三星多款WP8终端美国上市日期及运营商定制方式。…

博客地址迁移

博客地址迁移 新的文章不在博客园写了&#xff0c;有兴趣关注本人博客的请移步 https://github.com/jsCoder-yy 另外&#xff0c;旧的博客内容也会逐步迁移到github上。posted on 2016-06-30 14:15 jsCoder_洋洋 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com…

为什么[]==0;JavaScript里什么情况下a==!a为true呢?

原文链接 JavaScript里什么情况下a!a为true呢&#xff1f; 答案是当a []的时候&#xff0c;这是因为JavaScript的类型转换。 我们先来考虑这个问题&#xff0c;console.log([] false)会打印什么呢&#xff1f;答案是true。为什么呢&#xff1f;首先&#xff0c;因为当&quo…

正向代理与反向代理;

正向代理&#xff1a; A页面访问B页面&#xff0c;如果它们跨域&#xff1b;A还是想拿B的资源&#xff1b; 可以通过代理实现&#xff0c;A把信息发给服务器&#xff0c;这里的服务器就是代理&#xff1b;服务器访问B&#xff0c;再把信息返回给A&#xff1b; 这时B页面不知…

字节对齐测试实例

先看理论&#xff1a; 1. 更改C编译器的缺省字节对齐方式 在缺省情况下&#xff0c;C编译器为每一个变量或是数据单元按其自然对界条件分配空间。一般地&#xff0c;可以通过下面的方法来改变缺省的对界条件&#xff1a; 使用伪指令#pragma pack (n)&#xff0c;C编译器将按…

spring-初始化完成后运行指定内容

方案1:继承ApplicationListener public class InstantiationTracingBeanPostProcessor implements ApplicationListener<ContextRefreshedEvent> { Override public void onApplicationEvent(ContextRefreshedEvent event) { //需要执行的逻辑代码&#xff0c;当spring容…

读取Android系统的多媒体库

android系统有一个数据库表会把系统中的所有多媒体文件信息读入&#xff0c;开机的时候会自动读取&#xff0c;也可以模拟发广播让系统扫描。 1.拿到一个ContentResolver ContentResolver resolver context.getContentResolver(); 2.查询数据库表&#xff0c;返回一个cursor 1…

关闭eslint检验;vue-cli3搭建的vue项目关闭eslint;脚手架3关闭eslint;

本文是解决关闭eslint的问题&#xff1b;如果想要开启eslint和配置&#xff0c;可以查看这篇开启eslint检验&#xff1b; 我们使用vue-cli3脚手架搭建vue项目时候&#xff0c;会默认选中eslint风格代码&#xff1b;如果想要关闭eslint检验&#xff0c;有如下两种方案&#xff…