`
txf2004
  • 浏览: 6832431 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

给编程狂热者的ant task笔记

阅读更多

作者:江南白衣

这篇文档是专门写给那些编程狂热者,在Ant里编程时要留意的重要Task。

不知为何,老外的各种脚本都写得格外漂亮。从Appfuse里学到很多,在编写SpringSide2.0的构件安装脚本时又被迫自学了不少,这里作下总结。

如果只说一样最重要的事情,就是ant-contrib的<if> 和 <for>节点,使Ant 拥有了完整的编程能力。

1. 变量

Ant里的变量有个诡异的特性----一旦被赋值就不会改变,这个特性有时候帮助很大,有时候让人很苦恼,一定要注意。另一样要注意的是,Ant里的变量和其他语言的变量一样,有可效范围。

1.由命令行赋值

ant build.xml -Dtomcat.home=foo

2.与用户交互输入--Input task

<input message="请选择一个Target "
validargs="compile,jar,test"
addproperty="my.input"/>

3.从propertis文件读取并存盘 -- propertyfile task

<propertyfile file="my.properties">
<entry key="springside.home" default="."/>
</propertyfile>

如果my.properties 不存在,生成my.properties文件,springside.home=.。有一个特别有用的地方:有些properties文件的属性每个开发者都不同,不想放入svn,但又想初始化数值,可以用该命令。

<propertyfile file="my.properties">
<entry key="springside.home" value="....."/>
</propertyfile>

重新写入配置文件。

2. 流程控制

如果没有ant-contrib 贡献的<if> 和<for>节点,Ant的可编程性是极低极低的。

2.1 if task

ant原来可以在target级进行if判断(unless,if 属性),但实在太不方便了。

2.2 Conditions

但Ant预先封装的一堆condition很是很方便的。这些condition完全从实际出发,包括文件是否存在,http://localhost:8080是否连通都可以作为条件,见Ant的参考手册

2.3 For task

支持"a,b,c,d" 字符串数组的循环与文件目录,Fileset的循环。

2.4 Parallel task

Parallel非常有用,比如我想一边开tomcat,一边做别的,就需要使用它,否则就只有用spawn=true属性把tomcat放在后台运行。spawn有很多不好的地方,比如不能即时在console看到信息,停止ant运行不能把tomcat关掉等。

Parallel相当于一个容器,放在里面的每个task都会被并行执行。如果想把某几个task顺序执行,用相当于()的Sequential task包起来。

2.5 Waitfor task

暂停ant执行直到条件符合,比如<waitfor><http url=http://localhost:8080/></waitfor>就会等待tomcat启动后才会继续往下执行。Macrodef task

3. 代码封装

ant 代码最基本的封装是

1. ant task:调用其他脚本的任务,可设定dir 与是否继承本脚本的变量。

2. antcall task:调用本脚本内其他task,可设置参数。

3. import task :就像其他语言的include一样,引入其他脚本内容到本脚本里。

1. AntFetch, AntCallBack task

ant-contrib贡献,对应于Ant 与 AntCall。原版只能向被调用函数传递变量,函数执行后没办法return 值。antcallback的语法如下
<antcallback target="mytarget" return="myresult1,myresult2"/>

2. Macrodef task

作为最小的封装单位,与以<target>封装再<antcall target="xxx">调用差不太远,细微之处自行体验了。个人比较喜欢用macrodef。

3. Java taskExec task 直接执行Java类或程序

注意执行目录的定义。另在Windows下如果要直接运行dos窗口中的命令,以下指令启动默认浏览器访问localhost:

<exec executable="cmd.exe">
<arg line="/c start http://localhost:8080>
</exec>
"/

4. 扩展Ant的Task

扩展ant task很简单,实现execute() 方法执行task,实现setter接口让ant框架执行属性注入。继承Task 获得一些ant的能力,比如查询某个变量的值。

稍微有点麻烦的是多层嵌套属性的注入。详细请看http://ant.apache.org/manual/developlist.html

SpringSide 2.0 里很简单的实现了一个XML File Merge的task,见XmlMergeTask.java。

里面的一个教训是如果变量是文件或路径,需要把变量声明为java.io.File或者org.apache.tools.ant.types.Path,Ant才会在注入时为相对路径加上project.basedir。

蛋蛋说扩展Ant的最方便的方法还是在ANT里嵌套脚本。导入BSF库以后,你就可以用BSF支持的脚本语言了(见Script Task)。接下来有机会尝试一下。

5. 文件操作

刚好springside里进行了比较多的文件操作,随便记一下。

replace 与 copy 时加入filter, 都可以进行字符串替换.

concat在文件末添加其他文件的内容。

好困,很多东西没写详细,明天再补充。

题外话,Ant 完整演示了如何编写XML式的代码,虽然对于开发人员来说XML编码非常麻烦,远远没有Ruby的rake以ruby代码本身来构建系统清晰,但对于IDE,特别是希望图形化编程的IDE来说,XML比普通代码要容易渲染得多,所以普元EOS的图形化编程也是序列成XML代码。再另外,Ant的task 和 普元的构件也有相似。

分享到:
评论

相关推荐

    DEVCPP编程软件

    它集合了GCC、MinGW等众多自由软件,并且可以从工具支持网站上取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作,并且你拥有对这一切工具自由使用的权利,包括取得源代码等,前提是你也必 ...

    c语言c++语言编程软件Dev C++

    它集合了GCC、MinGW等众多自由软件,并且可以从工具支持网站上取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作,并且你拥有对这一切工具自由使用的权利,包括取得源代码等,前提是你也必 ...

    devcpp编程软件

    它集合了GCC、MinGW等众多自由软件,并且可以从工具支持网站上取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作,并且你拥有对这一切工具自由使用的权利,包括取得源代码等,前提是你也必 ...

    Scala编程.V.0.81

    第1节 Scala语言概况马丁·奥德斯基(Martin Odersky)是编译器及编程的狂热爱好者。主流JVM的Javac编译器就是马丁·奥德斯基编写出来的,J

    Grafos2_Task_Manager

    狂热的狂热时代,狂热的哥罗尼亚人,狂热的哥伦瓦人像狂暴者,狂热的狂热者,狂热的狂热者,超级狂热者Tarefas的最高奖状。 没问题的专有权: 快节奏的速度,快节奏的速度。 取消对受抚养人的抚恤金,解除对受抚养...

    Dev-Cpp 5.4.2 MinGW 4.7.2 32位版本 32bit IDE C++编程工具 ORWELL c++ 2013年6月更新

    它集合了MinGW等众多自由软件,并且可以取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作。Dev-C++是NOI、NOIP等比赛的指定工具 Dev-C++ Dev-C++使用MingW32/GCC编译器,遵循C++ 11标准。...

    Dev-C++编程

    Dev-C++是一个Windows环境下C/C++的...它集合了MinGW等众多自由软件,并且可以取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作。Dev-C++是NOI、NOIP等比赛的指定工具,缺点是Debug功能弱。

    狂热和热爱是两个概念

    狂热和热爱是两个概念

    UCM狂热者:从Base方式转移到UCMClearCase

    2004年12月你想过将ClearCase由base方式转移到UCM方式吗?你的base配置支持你的组织当前的使用模型吗?你可能想考虑何时决定转移到UCM方式,这里有来自ChristianBuckley和DarrenPulsipher的一些想法。...

    Simple-CRUD-Application-Lib-PHP-MYSQL-JQuery-Ajx-CSS3:它的狂热者包含许多东西

    简单CRUD应用程序库... 它的狂热者包括许多东西 简单PHP Mysql 添加更新删除库 Ajax Jquery分页选项卡 令人惊叹的惊人设计 上传文件 Turn.js 电子书Mysql PHP从数据库获取 联系人: : 有关更多信息,请加入: :

    病毒编程技术之恶意代码的亲密接触

    无论你是一个狂热的技术爱好者,还是一个软件产品的开发人员,都应该对病毒技术有所了解,以至于当它来临的时候能够从容应对或是为客户生产出安全的产品。出于这些目的,我们将组织一系列恶意代码的亲密接触的文章,...

    warp-speed:作为星球大战的狂热者,我决定花一天时间来制作WarpSpeed(一种简单的视觉效果)。 不是很复杂,但是它是诚实的工作。 内置HTML,CSS和Vanilla JS

    概述作为星球大战的狂热者和Javascript的新手,我决定将两个和两个放在一起。 这是几个月前我的原始项目之一,在这里我第一次被介绍给Math.Random()和mouseX / mouseY函数。

    Javascript函数式编程简单介绍

    几十年来,函数式编程一直是计算机科学狂热者的至爱,由于数学的纯洁性和谜一般的本质, 它被埋藏在计算机实验室,只有数据学家和有希望获得博士学位的人士使用。但是现在,它正经历一场复兴, 这要感谢一些现代语言...

    JosephusProblem:解决“ Josephus问题”的Java程序

    现在,约瑟夫斯(不是一个傻瓜)提出了一种有序的集体自杀方法:所有狂热者将围成一个圈,每第n个人将被杀害(每个狂热者被消灭时,圈将关闭),直到每个人都死了。 当然,最后一个人将是唯一一个必须自己做的人。 ...

    Dev-C++ c语言的编辑软件

    它集合了GCC、MinGW32等众多自由软件,并且可以取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作,并且你拥有对这一切工具自由使用的权利,包括取得源代码等,前提是你也必须遵守GNU协议。...

    dev-c++ dev cpp c++编译器

    它集合了GCC、MinGW32等众多自由软件,并且可以从devpak.org上取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作,并且你拥有对这一切工具自由使用的权利,包括取得源代码等,前提是你也必须...

    nsidr:任天堂粉丝的过去时代的狂热者仍然需要写作

    nsidr nsidr.com的代码库使用KeystoneJS v4和MongoDB在Node.js v10 +和npm v6 +上运行。安装npm i配置对于本地开发,请将提供的.env-sample复制并重命名为.env并提供必要的凭据。跑步npm start

    马太效应下的短视频狂热原因——以抖音APP为例.pdf

    马太效应下的短视频狂热原因——以抖音APP为例.pdf

Global site tag (gtag.js) - Google Analytics