Gradle 學(xué)習(xí)總結(jié)

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

maven vs 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.png

之后就可以使用 gradlew 命令來構(gòu)建項目了:gradlew build

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容