在Java碼農的世界裏,構建工具一直是一個不可或缺的元素。在這個小圈子中影響力最大的角色莫過於Maven了。它使用XML做爲配置文件,改進了前輩Ant的複雜的構建配置,提供了一些現成的目標,而不須要咱們一個個的將構建任務的每一個命令一一列出。另外它提供了一個殺手鐗功能,那就是依賴管理,它經過簡單的配置就能夠自動從網絡上下載項目所需的依賴,這革命性的改變了咱們開發軟件的方式。能夠想象,若是你是一個大型軟件開發項目組的成員,若是使用代碼倉庫管理依賴jar包會令倉庫變得多麼龐大!Maven的製品倉庫設計實現了製品與代碼間的解耦,爲基於製品的協做提供了可能。apache
在Java構建領域,咱們可以看到一些新興的工具在涌現。好比基於Groovy的Gradle。Hibernate就將本身的項目從Maven遷移到了Gradle,Google官方Android開發的IDE Android Studio也默認使用了Gradle進行構建。這些事件令Gradle吸引了很多眼球。Gradle真的要替代Maven了麼?固然沒有,Maven在現在仍然是Java構建技術的事實標準。Gradle也仍然使用了Maven的製品庫來作依賴管理。可是從Gradle身上,咱們確實看到了進步。簡潔的Groovy語法和靈活的配置令咱們眼前一亮。網絡
依賴管理
Maven的配置文件是.pom文件。POM是項目對象模型(Project Object Model)的簡稱,它是Maven項目中的文件,使用XML表示。其中包含項目的基本信息,構建過程,環境信息,依賴信息等。在pom.xml中咱們須要引入一個依賴時須要將它的groupId, artifactId和version都用標籤引發來。可是在Gradle項目的build.gradle中你會發現,僅僅須要將三者的value用:連起來,並"調用compile函數"就能夠啦。maven
1、構建生命週期管理
除了依賴管理之外,構建工具的另外一個主要用途就是構建的生命週期管理。函數
Maven有三個生命週期,每一個生命週期又分爲多個階段:工具
Clean:包含3個階段,與清理上次構建生成的文件相關
Default:Maven的核心生命週期,包含多個階段如預處理、編譯、測試、打包、安裝到本地倉庫、發佈到遠程倉庫等。
Site: 包含4個階段,與生成項目報告,站點,發佈站點相關。
這些生命週期都是系統自定義好的,若是咱們須要修改現有的構建生命週期的話,咱們就要編寫一個Maven插件。由於Maven是經過插件發來完成大多數的構建任務。每一個插件能夠綁定一個生命週期。配置好綁定生命週期後,咱們須要定義插件的任務,在Maven中每一個任務的goal稱做Mojo,每一個Mojo咱們都須要實現org.apache.maven.plugin.Mojo接口。也就是咱們須要定義一個類來實現這個接口。使用時咱們須要引入這個插件,並配置須要執行的goal。測試
Gradle中有一個基本概念叫Task,咱們能夠使用Task來完成需求,變得很是簡單。gradle
2、製品發佈
在製品發佈這個操做上,Maven要扳回一局。Maven原生支持maven jar的格式,發佈很簡單;而Gradle雖然說既支持Maven又支持Gradle,可是就要咱們本身作不少額外的工做。好比Maven要發佈製品,只須要配置遠程倉庫的參數,而gradle發佈製品,還須要生成pom文件。ui
最後:Just have a try! Maven和Gradle都是很是優秀的構建工具,增長兩者的使用經驗不是一個很虧的事情。插件