時至今日,若是你的Java項目依然須要啓動一個特定的工具,好比IDE,才能編譯部署,那你的項目不在本文的討論之中,由於實在落後得太讓人無語了。 html
好,迴歸正題。舊時代的Java世界,構建工具等同於兩個詞Ant 和 Maven。 java
Ant源自Make,同JUnit同樣,它也是一個航班產物(參見《Ant權威指南》 序)。不過,Make的基礎註定了它的起點不高,全部一切都要手工打造。我還依稀記得曾幾什麼時候,往往開始一個項目都要從新複製一份Ant腳本,修修改改。 Maven給了人們新的但願,目錄結構的約定、依賴管理、IDE集成,那時看來,幾近完美。是的,幾近,還差了那麼一點點。就是那麼一點點,倒是致命傷。 node
只要一個項目進行一段時間,一個必然遇到的問題就是,編寫新的自動化腳本。由於每一個項目都有本身的特定需求,標準作法必然是沒法知足的。擴展 Maven對任何新手都是一件頭疼的事,咱們要學會編寫插件,要搞清楚生命週期,這時,忽然會喚起一絲絲對於ANT的懷念,雖然它作簡單事不容易,但作復 瑣事卻也沒這麼困難。 程序員
若是那些日子,咱們不得不忍受Ant和Maven的不完美,那如今,是時候拋棄它們了。新時代Java構建有兩個很好的候選:Gradle 和 Buildr。在我看來,它們真正比Maven更強大的地方,編寫本身的任務更加容易。更值得興奮的一點是,咱們終於能夠拋棄冗長的XML,選擇一種更優雅的程序設計語言來寫代碼了,這幾乎意味着你能夠作到想作的一切。 spring
Buildr是Apache出品的構建工具,它以Ruby做爲構建腳本。我曾在InfoQ發表過一篇很長的文章《軟件開發地基》,討論軟件項目應該具有一些基礎構建項,就是以Buildr爲基礎的。有興趣的話,能夠參考一下。這裏就再也不贅述。順便說一下,那篇文章裏的內容,除了某些寫法如今須要作一些微調,大部份內容依然是適用於大多數Java項目。 shell
Gradle如今是整個Java社區的構建新寵,它採用Groovy做爲本身的構建語言。若是你知道,Groovy是一門誕生自JVM平臺的語言,這就決定了它要比其它移植到JVM上的語言能更好的適應JVM平臺,它能夠採用更符合Java世界的方式無縫地整合Java既有的程序庫,而沒必要像移植語言那樣削足適履。 apache
初涉Gradle,最讓人吃驚的一點莫過於它詳盡的文檔,涵蓋了Gradle使用的方方面面,這是許多開源軟件項目沒法媲美,即使早在它的1.0版本還沒有發佈之時。固然,能作到這一點是由於它背後有一個公司在支撐:GradleWare,這意味着若是你須要商業支持,也是能夠的。 app
Gradle 1.0還沒有發佈之,它就捧回2010年的Spring大獎和入圍了2011年的JAX大獎。若是你還須要更多的信心,做爲Java開發人員,你不可能不知道Spring,那Spring轉投Gradle懷抱,應該是對Gradle最有利的支持了。 maven
說了這麼多,程序員最喜歡看到的東西仍是代碼。首先,請自行下載安裝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專門討論,《選擇,構建工具》。若是你在作構建工具的技術選型,能夠參考。