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

标签: 更新 java 知识 | 发表时间:2013-01-16 13:21 | 作者:dreamhead
出处:http://dreamhead.blogbus.com

时至今日,如果你的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专门讨论,《 选择,构建工具》。如果你在做构建工具的技术选型,可以参考。

相关 [更新 java 知识] 推荐:

你应该更新的Java知识之常用程序库(二)

- - 梦想风暴
一句话,如果你写单元测试,就应该用 Hamcrest. 如今不写单元测试,你都不好意思说自己在做工程项目了. 如果你还写成下面这样,我只能说你落伍了:. 请告诉我,哪个是执行结果,哪个是预期结果,不管你是怎样,反正大多数情况下,我是记不住的. 所以,这个在只重功能不重可读性年代产生的API该更新了.

你应该更新的Java知识之常用程序库(一)

- - 梦想风暴
在很多人眼中,Java已经是一门垂垂老矣的语言,但并不妨碍Java世界依然在前进. 如果你曾离开Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老Java中的新东西. 一句话,只要你做Java项目,就应该用 Guava. guava是Google出品的一套Java核心库,在我看来,它甚至应该是JDK的一部分.

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

- - 梦想风暴
时至今日,如果你的Java项目依然需要启动一个特定的工具,比如IDE,才能编译部署,那你的项目不在本文的讨论之中,因为实在落后得太让人无语了. 旧时代的Java世界,构建工具等同于两个词 Ant和 Maven. Ant源自Make,同JUnit一样,它也是一个航班产物(参见《 Ant权威指南》序).

你应该更新的Java知识之Observer

- - Java - 编程语言 - ITeye博客
作为一个Java程序员,不熟悉设计模式简直不好意思和人打招呼,而Observer模式可以说是位列最常用的设计模式之列,虽然有时候在具体代码里,它不一定叫这个名字,比如改头换面叫个Listener,但模式就是这个模式. 手工实现一个Observer也不是多复杂的一件事,只是因为这个设计模式实在太常用了,Java就把它放到了JDK里面:Observable和Observer,从JDK 1.0里,它们就一直在那里.

java基础知识

- - CSDN博客互联网推荐文章
JAVA相关基础知识. 1、面向对象的特征有哪些方面. 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面. 抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节. 抽象包括两个方面,一是过程抽象,二是数据抽象. 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.

硅谷中的知识产权:Java大战

- - 译言-投资/理财/创业
硅谷的知识产权:Java大战  甲骨文和谷歌之间的法律斗争非常神秘,但是风险也非常高. 甲骨文和谷歌的老总分别是拉里·埃里森和拉里·佩奇. 他们的教名是一样的,但对某一知识产权问题的观点却是不同的. 4月16日,陪审团开始在庭审中听取双方的辩解,来决定谷歌的安卓操作系统是否侵犯了甲骨文公司的版权和专利.

欧朋浏览器6.2 For Android/Symbian/Java发布更新

- 洞箫 - cnBeta.COM
新一代浏览器界面,简约、精致、时尚,摆脱拥挤,复杂的手机浏览器界面,打造个性化的浏览器. 快速拨号“快速拨号”将喜欢的网站添加到首页,实现一键点击访问. 通过定制“快速拨号”,你可以打造一个个性化的浏览器首页. 体积小巧、功能强大,欧朋浏览器结合了强大的内核和领先的云端转码技术,可使手机访问网站速度提升5到10倍,使上网流量节省最高达90%.

苹果发布第二个 Java 更新(2012-002)

- - 果迷网
前天苹果刚刚发布 Mac OS X 的 Java 更新 2012-001,今天又接着发布了 Java 2012-002 更新,再度提高系统安全性. 根据统计,目前全球共有 60 万台 Mac 电脑感染了 Flashback 木马,这种木马正是利用了 Java 运行时的安全缺陷感染 Mac 电脑的.

深入理解Java虚拟机(JVM高级特性与最佳实践java虚拟机)的一些知识总结

- - CSDN博客推荐文章
        要回答这个问题,先了解下GC的发展史、jvm运行时数据区的划分、jvm内存分配策略、jvm垃圾收集算法等知识.         先说下jvm运行时数据的划分,粗暴的分可以分为堆区(Heap)和栈区(Stack),但jvm的分法实际上比这复杂得多,大概分为下面几块:.         1、程序计数器(Program Conuter Register).

Oracle Java SE 8 发行版更新:限制商业或生产用途

- - 开源中国社区最新新闻
Oracle Java SE 8 发行版更新. Oracle Java SE 8 的公开更新仍面向单独的个人使用提供,至少持续至 2020 年底. 2019 年 1 月以后发布的 Oracle Java SE 8 公开更新将不向没有商用许可证的业务、商用或生产用途提供. 如果您是使用者,将 Java 用于单独的个人用途,则至少在 2020 年底之前,您对 Oracle Java SE 8 更新仍具有与现在相同的访问权限.