1. Gradle
過去在 Java 世界里,Maven 是構(gòu)建的事實標準。而現(xiàn)在系統(tǒng)日益復(fù)雜,構(gòu)建的靈活性要求越來越高。Maven無法很好地支持復(fù)雜的系統(tǒng)構(gòu)建。所以,誕生了 Gradle。
Gradle 是基于 Groovy(而非冗長的xml文件)來聲明項目配置文件的,它更靈活更強大。
Groovy 是一個基于 JVM 的動態(tài)語言。每一個 Gradle build file 是一個可執(zhí)行的 Groovy 腳本。
但是對于簡單的構(gòu)建任務(wù),你甚至都不需要會 Groovy 語法。當然,如果有 Groovy 的基礎(chǔ),可以在 build file 中寫代碼來控制構(gòu)建過程。
支持的語言:Java、Scala、Android、C/C++ and Groovy 等。
2. 為什么使用 Gradle
Gradle 的優(yōu)點:
- 對多語言、多平臺有更natural的支持
- 構(gòu)建效率更高
- 社區(qū)比Maven更活躍
- 配置更簡潔
- 基于 Groovy,能完成復(fù)雜系統(tǒng)的構(gòu)建任務(wù)
- DSL比XML更簡潔高效
現(xiàn)在已經(jīng)有大量的開源軟件支持 Gradle 了。
3. 如何使用 Gradle
對于 Mac 用戶,只需執(zhí)行 brew install gradle 就可以安裝了,而且 IDEA 默認提供了 Gradle 的 Plugin,當然還有 Gradle Wrapper,后文會詳細介紹它。
Gradle 中有一個類似 Maven 中 pom.xml 的構(gòu)建配置腳本文件:build.gradle,在該文件中配置項目構(gòu)建的所有信息。
Gradle 中的基本概念包括:project、task、plugin。
- project: 通常指一個項目;
- task: 指構(gòu)建過程中的任務(wù),如編譯classes、創(chuàng)建Jar、生成Javadoc等;
- plugin: plugin 中可以定義默認的task;
3.1 plugins
大多數(shù) Java 項目都是相似的,包含編譯源碼,運行單元測試,創(chuàng)建Jar包等?,F(xiàn)在無需為每個project都配置一套了,Gradle通過插件來解決這種重復(fù)性工作(插件是 Gradle 的擴展,它會配置項目,加入一些預(yù)定義的 tasks)。同時你也可以編寫自己的plugin 或引入別的 plugin。
對于 Java plugin 來說: apply plugin: 'java'
Gradle 和 Maven 一樣,采用了“約定優(yōu)于配置”的方式對 Java project 布局,并且布局方式是和 Maven 一樣的:
- 源碼文件位于 src/main/java 路徑下
- 測試文件位于 src/test/java 路徑下
- 資源文件位于 src/main/resources 路徑下
- 測試用文件位于 src/test/resources 路徑下
- 構(gòu)建出的Jar包位于 build/libs 路徑下
同時 Gradle 也支持自定義路徑,一般把這些目錄叫做source set。
sourceSets {
main {
resources {
srcDir "src/main/profile/${env}"
}
}
}
3.2 tasks
Java plugin 提供了一些默認的 task, 比較常用的如:clean、test、check、build等。這些task都是圍繞著Java plugin的構(gòu)建生命周期的??梢允褂?Gradle tasks 來列出項目的所有 tasks。
1. build
運行 gradle build,就可以
- 編譯源文件
- 運行單元測試
- 生成 JAR 包
2. clean
刪除 build 生成的目錄和文件
3. test
運行單元測試
4. check
編譯并測試代碼(如果使用 checkstyle,該任務(wù)也會同時執(zhí)行checkstyle)
5. assemble
編譯并打包代碼,但不運行單元測試。
3.3 依賴管理
Gradle和Maven在依賴管理上幾乎差不多,核心的概念是一樣的,只不過Gradle語法更精簡,可讀性更強,并且多了一些更靈活的自定義配置。
依賴相關(guān)的倉庫配置很靈活,支持多種repository,如 mavenLocal()、mavenCentral()、jcenter()。
依賴的寫法如下:
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework:spring-core:3.2.4.RELEASE')
compile('org.springframework:spring-beans:3.2.4.RELEASE')
compile('org.springframework:spring-context:3.2.4.RELEASE')
testCompile('junit:junit:4.7')
}
4. Gradle wrapper
Gradle Wrapper 腳本是一種更加方便的使用 Gradle 的方法,它使得你可以在不安裝 Gradle 的情況下,也可以使用 Gradle。
執(zhí)行 gradle wrapper(也可以指定版本號:gradle wrapper --gradle-version 2.9)。執(zhí)行完后,就可以在工程目錄中看到該結(jié)構(gòu)了:

之后就可以使用 gradlew 命令來構(gòu)建項目了:gradlew build
gradlew 的文件應(yīng)該提交到 Git 上去,這樣任何人獲取代碼后,不用安裝gradle,就可以構(gòu)建工程。