技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Java --> 你应该更新的Java知识之构建工具

你应该更新的Java知识之构建工具

浏览:5948次  出处信息

时至今日,如果你的Java项目依然需要启动一个特定的工具,比如IDE,才能编译部署,那你的项目不在本文的讨论之中,因为实在落后得太让人无语了。

好,回归正题。旧时代的Java世界,构建工具等同于两个词AntMaven

Ant源自Make,同JUnit一样,它也是一个航班产物(参见《Ant权威指南》序)。不过,Make的基础注定了它的起点不高,所有一切都要手工打造。我还依稀记得曾几何时,每每开始一个项目都要重新复制一份Ant脚本,修修改改。Maven给了人们新的希望,目录结构的约定、依赖管理、IDE集成,那时看来,几近完美。是的,几近,还差了那么一点点。就是那么一点点,却是致命伤。

只要一个项目进行一段时间,一个必然遇到的问题就是,编写新的自动化脚本。因为每个项目都有自己的特定需求,标准做法必然是无法满足的。扩展Maven对任何新手都是一件头疼的事,我们要学会编写插件,要搞清楚生命周期,这时,突然会唤起一丝丝对于ANT的怀念,虽然它做简单事不容易,但做复杂事却也没这么困难。

如果那些日子,我们不得不忍受Ant和Maven的不完美,那现在,是时候抛弃它们了。新时代Java构建有两个很好的候选:GradleBuildr。在我看来,它们真正比Maven更强大的地方,编写自己的任务更加容易。更值得兴奋的一点是,我们终于可以抛弃冗长的XML,选择一种更优雅的程序设计语言来写代码了,这几乎意味着你可以做到想做的一切。

Buildr是Apache出品的构建工具,它以Ruby作为构建脚本。我曾在InfoQ发表过一篇很长的文章《软件开发地基》,讨论软件项目应该具备一些基础构建项,就是以Buildr为基础的。有兴趣的话,可以参考一下。这里就不再赘述。顺便说一下,那篇文章里的内容,除了某些写法现在需要做一些微调,大部分内容依然是适用于大多数Java项目。

Gradle现在是整个Java社区的构建新宠,它采用Groovy作为自己的构建语言。如果你知道,Groovy是一门诞生自JVM平台的语言,这就决定了它要比其它移植到JVM上的语言能更好的适应JVM平台,它可以采用更符合Java世界的方式无缝地整合Java既有的程序库,而不必像移植语言那样削足适履。

初涉Gradle,最让人吃惊的一点莫过于它详尽的文档,涵盖了Gradle使用的方方面面,这是许多开源软件项目无法媲美,即便早在它的1.0版本尚未发布之时。当然,能做到这一点是因为它背后有一个公司在支撑:GradleWare,这意味着如果你需要商业支持,也是可以的。

Gradle 1.0尚未发布之,它就捧回2010年的Spring大奖入围了2011年JAX大奖。如果你还需要更多的信心,作为Java开发人员,你不可能不知道Spring,那Spring转投Gradle怀抱,应该是对Gradle最有利的支持了。

说了这么多,程序员最喜欢看到的东西还是代码。首先,请自行下载安装Gradle,然后,按照常见的Java项目布局把代码准备好(感谢Maven为我们给予我们约定),比如:

  • src/main/java,源代码文件目录

  • src/main/resources,资源文件目录

  • src/test/java,测试代码目录

下面是一个简单的Gradle构建脚本,将其存放于build.gradle

apply plugin: 'java'

repositories {
mavenCentral()
}

dependencies {
 compile(
'com.google.guava:guava:13.0.1',
'joda-time:joda-time:2.1'
 )

 testCompile(
'junit:junit:4.10',
'org.mockito:mockito-all:1.9.0'
 )
}
(build.gradle)

接下来的事情就很简单了,在命令行里键入

 gradle build

如果一切正常,我们应该会看到构建成功的字样,然后,到build/lib,你就看到自己构建出来的JAR文件了。当然,这只是一个简单得不能再简单的例子,如果需要了解更多,Gradle那详尽的文档便是最好的去处。

关于构建工具的选择考量,我曾经写过一篇blog专门讨论,《选择,构建工具》。如果你在做构建工具的技术选型,可以参考。

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:Java应用运维
后一篇:Java的那些事儿 >>
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1