- 浏览: 94041 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (82)
- Groovy & Grails (13)
- 面向对象数据库db4o (2)
- CoreJava (17)
- AOP (3)
- Spring (3)
- Hibernate (1)
- JAVA安全认证 (0)
- DDD (1)
- 职场 (1)
- IT杂谈 (4)
- 技术实践日志 (7)
- SOA (5)
- js (2)
- Python (3)
- cluster (2)
- load balance (2)
- distributed architeture (2)
- English (1)
- Wicket Tapestry (1)
- architecture (1)
- concurrenct (1)
- color UML (1)
- disruptor (2)
- linux (3)
- REST (1)
- sql injection (1)
- UML (1)
- eclipse 实用插件 (1)
- data structure & algorithm (2)
- lisp python (2)
- lisp (4)
- compiler (2)
- interpreter (4)
最新评论
-
zhaohuaxishiwzw:
老贴留名!
Tapestry and Wicket compared -
flyqantas:
经典的好文章。
UML类图与类的关系详解 -
myemptyname:
好文章,不管你懂不懂,我是懂了
闭包,懂不懂由你,反正我是懂了 -
GuolinLee:
看进来可能对我有点儿用,但是格式太差,太难看了放弃
java.util.concurrent 多线程框架 -
lonelybug:
在JiveJdon3.0中,值对象ForumState是被聚合 ...
实战DDD(Domain-Driven Design领域驱动设计:Evans DDD)
实战 Groovy: 用 Groovy 进行 Ant 脚本编程为更具表现力、更可控的构建而组合使用 Ant 和 Groovy |
级别: 初级 Andrew Glover (aglover@vanwardtechnologies.com), CTO, Vanward Technologies 2004 年 12 月 14 日 Ant 和 Maven 两者在构建处理工具的世界中占统治地位。但是 XML 却凑巧是一种非常没有表现力的配置格式。在“实战 Groovy”这个新系列的第 2 期中,Andrew Glover 将介绍 Groovy 的生成器实用工具,这个工具能够极其容易地把 Groovy 与 Ant 和 Maven 结合在一起,形成更具表现力、更可控的构建。<!----><!----><!----> Ant 作为 Java 项目构建工具的普遍性和实用性是无法超越的。即使是 Maven 这个构建领域的新锐工具,也要把自己的许多强大能力归功于从 Ant 学到的经验。但是,这两个工具有共同的不足之处:扩展性。即使 XML 的可移植性在促进 Ant 和 Maven 走向开发前端上扮演了主要角色,XML 作为构建配置格式的角色仍然或多或少地限制了构建过程的表现力。 例如,虽然在 Ant 和 Maven 中都有条件逻辑,但是用 XML 表示有些繁琐。而且,虽然可以定义定制任务来扩展 Ant 的构建过程,但是这么做通常会把应用程序的行为局限在有限的沙箱中。因此,在本文中,我将向您演示如何把 Groovy 和 Ant 在 Maven 内部 结合起来,形成更强大的表现力,从而对构建过程进行更好的行为控制。 很快您自己就会看到,Groovy 给 Ant 和 Maven 都带来了令人瞩目的增强,Groovy 的优点在于它常常能恰到好处地弥补 XML 的遗漏!实际上,看起来 Groovy 的创建者肯定也曾经历过用 XML 实施 Ant 和 Maven 构建过程的痛苦,因为他们引入了 在 实战 Groovy 的这一期中,我将向您展示不用 XML,转用 Groovy 作为您的构建配置格式,对构造过程进行增强是多么容易。闭包(closure)是 Groovy 的一个重要特性,而且是这门语言之所以与众不同的核心,所以我在转到下一节之前,先要对闭包做一个快速回顾。 就像 Groovy 自己的一些非常著名的祖先一样,Groovy 也支持 匿名函数 或 闭包(closure) 的概念。如果您曾经用 Python 或 Jython 编写过代码,那么您可能对闭包比较熟悉,在这两种语言中,都是用 在 Groovy 中,闭包是能够封装行为的第一级匿名函数。当 Ruby 的缔造者 Yukihiro Matsumoto 注意到这些强大的第一类对象可以“传递给另一个函数,然后函数可以调用传入的 [闭包]”时,也开始染指闭包的应用(请参阅 参考资料,查看完整的采访)。当然,亲自操作 Groovy 是了解闭包对于这门美好的令人激动的语言是一笔多么大的财富的最好方法。
在清单 1 中,我又使用了一些本系列的第 1 篇文章曾经用过的代码;但是这一次的重点是闭包。如果您已经读过那篇文章(请参阅 参考资料),那么您可以回忆起我用来演示用 Groovy 进行单元测试的基于 Java 的包过滤对象。这次,我还用相同的示例开始,但是用闭包对它进行了极大的增强。下面是基于 Java 的 清单 1. 还记得这个简单的 Java Filter 接口吗?
上次,在定义了 对于没用闭包写成的代码来说,到现在为止还算不错。在清单 2 中,您会开始看到只有一点语法上的变化,代码就不同了(更好了!)。我将通过定义通用的 清单 2. 更加 Groovy 的过滤器 —— 使用闭包
添加闭包意味着我不用像在原来的 下一步是定义两个闭包。第一个通过对指定参数应用简单的 清单 3. 使用 Groovy 闭包的简单魔术
非常令人难忘,对吧?使用闭包,我能够把对期望行为的定义推迟到运行时 —— 所以不必像在以前的设计中要做的那样再定义新的 闭包确实是非常强大的家伙。它们还代表处理行为的另外一种方式 —— 而 Groovy(以及它的远亲 Ruby)对它有非常严重的依赖。所以闭包会是我们下一个主题的要点,下一个主题是用生成器进行构建。
使 Groovy 中的 Ant 更迷人的核心之处是 生成器。实际上,生成器允许您很方便地在 Groovy 中表示树形数据结构,例如 XML 文档。而且,女士们先生们请看,秘密在这:使用生成器,特别是 生成器的优点,尤其是 Groovy 的 我要用一个超级简单的示例向您介绍生成器:一个叫做 清单 4. Ant 的 Echo 任务
事情在清单 5 中变得更有意思了:我用相同的 Ant 标签,并在 Groovy 中用 清单 5. 用 Groovy 表示的 Ant 的 Echo 任务
生成器特别吸引人的地方是它可以让我把普通的 Groovy 特性与生成器语法混合,从而创建丰富的行为集。在清单 6 中,您应当开始看出可能性是无穷的: 清单 6. 用 Groovy 和 Ant 进行流控制(flow control)
在这个示例中,我要捕获源代码编译时的错误条件。注意 哎呀!Groovy 的功能真多!当然,知道什么时候应用这么聪明的特性是问题的关键,而我们都在不断地为之努力。幸运的是,实践出真知,一旦您开始使用 Groovy(或者为了这个原因使用任何脚本语言),您就会找到许多在实际工作中使用它的机会;从中了解它在哪里才真正适用。在下一节中,我将查看一个典型的、现实的示例,并在其中使用一些在这里介绍的特性。
对于这个示例,我们假设需要为我的代码定期建立校验和(checksum)报告。一旦实现了这个报告,就可以用它在我需要的时候检验文件的完整性。下面是校验和报告的高级技术用例:
完全摈弃 Ant 或 Maven,整个构建过程都使用 Groovy,在这个例子中,这样做有点极端。但实际上,正如我前面解释的,Groovy 是这些工具的极大 增强,而 不是 替代。所以,用 Groovy 的表现力处理后两项任务,而把第一步信托给 Ant 或 Maven,这样做才有意义。 实际上,我们只要假设我在第一步中用的是 Maven,因为坦白地说,它是我个人偏爱的构建平台。在 Maven 中可以很容易地用
为了通过 Ant 运行这个漂亮的校验和工具,我需要两条信息:哪个目录包含要进行校验和处理的文件,报告要写到哪个目录。对于工具的第一个参数,我希望它是一个用逗号分隔的目录列表。对后一个参数,我希望是报告目录。 我决定调用工作类 清单 7. Md5ReportBuilder 的 Main 方法
上述步骤中的第一步是检查这两个参数是不是传递到工具中。然后我把第一个参数用逗号进行分割,创建了一个数组,保存要在上面运行 Ant 的
Ant 包含一个 清单 8. runCheckSum 方法
从这一点起,构建报告就变成了循环练习。读取每个新生成的校验和文件,把该文件对应的信息送到 清单 9. 构建报告
那么,如何处理这个报告呢?首先,我用
我敢打赌您立刻就注意到在
这个 Groovy 巡演中的下一站是把它装配进构建过程,特别是放在我的 maven.xml 文件中。非常幸运的是,这是这个相对容易的练习中最容易的部分,如清单 10 所示: 清单 10. 在 Maven 中运行 Md5ReportBuilder
正如前面所解释过的,我已经规定必须在完整的编译之前运行校验和工具,所以,我的目标有两个前提条件:
完成对 maven.xml 文件的编码之后,就差不多完成了所有要做的事,但是还有最后一步:我需要用所需的依赖关系来更新 清单 11. Groovy 必需的依赖项
在 实战 Groovy 的第 2 期中,您看到了 Groovy 的表现力和灵活性与 Ant 和 Maven 无与伦比的应用结合在一起时发生了什么。对于任何一个工具,Groovy 都提供了有吸引力的替代 XML 的构建格式。它让您用循环构造和条件逻辑控制程序流,极大地增强了构建过程。 在向您展示 Groovy 的实用一面的同时,这个系列还专门介绍了它最适当的应用。应用任何技术的要点之一是认真思考它要应用的环境。在这个案例中,我向您展示了如何用 Groovy 增强 而不是 替换 已经非常强大的工具:Ant。 下个月,我要介绍 Groovy 的另外一项依赖闭包的特性。GroovySql 是个超级方便的小工具,可以使数据库查询、更新、插入以及所有对应的逻辑管理起来特别容易!下期再见!
|
发表评论
-
Groovy用户指南(5)
2007-09-06 14:22 1043Groovy用户指南(5) 5、Groovy Math& ... -
Groovy用户指南(4)
2007-09-06 14:20 943Groovy用户指南(4) 4、与Java的不同< ... -
Groovy用户指南(3)
2007-09-06 14:20 1088Groovy用户指南(3) 3、集合<o:p> ... -
Grails + EJB领域模型教程
2007-09-06 14:15 1457Grails + EJB领域模型教程 作者 Jason Rud ... -
Java帝国的王储——Groovy !
2007-09-06 14:01 1050Java帝国的王储——Groovy ! 让我们来回顾一下主 ... -
Groovy用户指南(2)
2007-09-06 13:54 905Groovy用户指南(2) 2、闭包<o:p> ... -
Groovy用户指南(1)
2007-09-06 13:51 1073Groovy用户指南(1) 1、类<o:p> ... -
实战 Groovy: 用 Groovy 进行 JDBC 编程
2007-09-06 13:47 921... -
Groovy和Grails简介
2007-09-06 13:46 1197Groovy和Grails简介 ... -
Groovy快速入门
2007-09-06 13:44 1035Groovy快速入门 1、 ... -
实战 Groovy: 使用 Groovy 模板进行 MVC 编程
2007-09-06 13:42 2075... -
使用Groovy IDE插件 (Groovy & Grails )
2007-09-06 13:36 2371使用Groovy IDE插件 1、 配置Groovy ...
相关推荐
对OO(面向对象编程)和Ant DSL 支持更好,在语法层面支持编写、编译shell脚本 减少结构性代码。开发web/GUI/Console程序,效率更高 简化单元testing and mocking 与Java无缝集成,互相调用 与Java...
Matlab集成的c代码GroovyLab:Groovy中简单有效的类似于MATLAB的科学编程 安装 GroovyLab的安装非常简单: 步骤1下载并解压缩.zip下载文件。 步骤2为您的平台运行适当的脚本,例如,对于像Unix这样的系统的.sh脚本和...
Gradle实战-第一章和第二章技术分享.pdf Gradle是当前最流行的构建工具之一,本文档将从Gradle的实战角度,深入剖析Gradle的技术要点,...本文档对Gradle的技术要点进行了深入剖析,帮助读者快速掌握Gradle的使用。
Groovy凭借其强大的处理原语,OO能力和Ant DSL,使编写Shell和构建脚本变得容易。 通过在开发Web,GUI,数据库或控制台应用程序时减少框架代码,还可以提高开发人员的生产率。 Groovy通过支持单元测试和现成的模拟...
elasticsearch-lang-groovy.zip,groovy语言插件允许将groovy作为脚本语言来执行。
Gradle可以很好地配合Maven进行依赖管理,并且把Ant脚本当作头等公民。 字节码操作 编程操作Java字节码的函数库。 ASM:通用底层字节码操作及分析。 Javassist:尝试简化字节码编辑。 Byte Buddy:使用“流式API”...
Gradle可以很好地配合Maven进行依赖管理,并且把Ant脚本当作头等公民。 字节码操作 编程操作Java字节码的函数库。 ASM:通用底层字节码操作及分析。 Javassist:尝试简化字节码编辑。 Byte Buddy:使用“流式API”...
Gradle是一个构建系统, 我们认为它是 java ( JVM ) 世界中构建技术的一个... 而不需要远程仓库或者 pom.xml 或者 ivy 配置文件 优先支持 Ant 式的任务和构建 基于 groovy 的构建脚本 有丰富的领域模型来描述你的构建
中文翻译《Gradle 3 用户指南》,Gradle是一个构建系统, 我们认为它是 java ... 而不需要远程仓库或者 pom.xml 或者 ivy 配置文件 优先支持 Ant 式的任务和构建 基于 groovy 的构建脚本 有丰富的领域模型来描述你的构建
它基于DSL(领域特定语言)编写,该语言是用Groovy编写的,使得构建脚本更加简洁和强大。Gradle不仅可以构建Java应用程序,还支持多种语言和技术,例如C++、Python、Android等。 更多信息和详细文档可以在[Gradle...
为什么不使用Ant做自动化编译脚本,因为ant上手快,但是维护起来太不方便了,有了Gradle你可以跟项目组的同事说,用Ant的孩子们别苦逼的维护了,赶紧换成gradle吧。本文面向gradle新手或者以前使用过gradle低版本的...
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来...6. 基于groovy脚本构建,其build脚本使用groovy语言编写 7. 具有广泛的领域模型支持你的构建
它基于DSL(领域特定语言)编写,该语言是用Groovy编写的,使得构建脚本更加简洁和强大。Gradle不仅可以构建Java应用程序,还支持多种语言和技术,例如C++、Python、Android等。 更多信息和详细文档可以在[Gradle...
Ant 是我们过去构建系统基本都会用到的,xml 脚本文件中包括若干 task 任务,任务之间可以互相依赖,对于一个大的项目来说,这些 xml 文件维护起来的确不是一件容易的事情,还有那些项目依赖的而没有版本号的 jar 包...
自定义任务可以调用Shell脚本,ant目标等。 自定义脚本 Groovy脚本在Hac中发送和执行。 将groovy脚本放到scripts文件夹中,将创建一个相应的gradle任务。 在Hac中运行任意的Groovy脚本 程序:从自动化项目中选择...
使用Maven Dependency插件进行优化 8.6. 最终的POM 8.7. 小结 II. Maven Reference 9. 项目对象模型 9.1. 简介 9.2. POM 9.2.1. 超级POM 9.2.2. 最简单的POM 9.2.3. 有效POM 9.2.4. 真正的POM 9.3. ...
用 Groovy 编写,这是一个 Groovy DSL 使用 Ivy 或 Maven 进行依赖管理 支持多项目构建 可以构建 Java 项目以外的东西,例如 JavaScript 或 C++ 高度可定制 声明性构建语言(表达意图) 我们告诉 Gradle 我们希望...
它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置,主要面向Java应用。然而,Gradle并不局限于Java,当前其支持的语言还包括C++...
gradle 是一个新兴的构建工具,称之为后起之秀也不为过。作为一个构建工具,它整合了ant和maven,灵活性和扩展性都...gradle 是基于groovy 脚本语言的,而groovy是可以直接编译成java class 文件,直接和java进行交互。