Gradle 入門-實現(xiàn)多項目構(gòu)建

本文作者:黃少存,叩丁狼高級講師。原創(chuàng)文章,轉(zhuǎn)載請注明出處。

之前咱們已經(jīng)學習了Gradle 的基本原理知識點,已經(jīng)了解了 Gradle 構(gòu)建配置的組成部分以及構(gòu)建的生命周期,如何進行依賴管理以及如何解決傳遞性依賴沖突.那這一篇咱們來做個實踐,來看下咱們在企業(yè)中經(jīng)常使用到的操作,就是如何在項目中來使用 Gradle 構(gòu)建工具.咱們先來看下多項目的構(gòu)建.

多項目構(gòu)建

在企業(yè)中,一個比價復雜的項目往往是分成幾個小項目來協(xié)同完成,這就涉及到多項目的構(gòu)建,而多項目構(gòu)建咱們需要先來學習一個概念叫"項目模塊化".

項目模塊化

模塊化是指將一個大程序按照功能劃分為若干小程序模塊,每個小程序模塊完成一個確定的功能,并在這些模塊之間建立必要的聯(lián)系,通過模塊的互相協(xié)作完成整個功能。

在企業(yè)項目中,包和類比較多,關系也比較復雜,為了能夠很好的管理和區(qū)分這些包和類,咱們會把代碼拆分成模塊,按某些功能點清晰的劃分邊界.比如把業(yè)務邏輯和數(shù)據(jù)持久拆分,比如把所有的 domain 拆分成一個模塊,或者大的劃分,把前后臺代碼拆分成兩個獨立的模塊.項目中的模塊要符合高內(nèi)聚低耦合思想.接下咱們來看下如何做多項目構(gòu)建

多項目構(gòu)建模塊劃分和依賴關系

以下咱們以一個點評網(wǎng)站(comment)的搭建來做模塊的劃分和關系的搭建,模塊劃分和模塊關系如下圖


comment 項目模塊劃分圖

咱們把點評網(wǎng)項目劃分為4個模塊,架構(gòu)如圖所示,web 和 admin 需要依賴 core 和 model,core 需要依賴 model,由于傳遞性依賴的特點,咱們待會在配置依賴時可以只配置 core 依賴 model,web 和 admin 依賴 core 即可.

有用過 Maven 或者其他構(gòu)建工具的小伙伴都知道,不管一個項目分為幾個模塊,最終都需要有一個 root 項目來統(tǒng)一的管理所有的模塊.對 Gradle 來說同樣也不例外,以下咱們先來看下模塊之間的關系以及 Gradle 構(gòu)建腳本中的配置范圍.

模塊關系和構(gòu)建腳本配置范圍

image.png

所有劃分出來的模塊都是屬于 root 項目的子模塊,所有項目(包括 root 項目)的公用配置在 allprojects 中配置,所有子模塊的公用配置可以在 subprojects 中來配置,build.gradle 針對項目的配置項都可以配置在 allprojects/subprojects 中.

多項目的構(gòu)建其實不僅僅是配置模塊和模塊之間的依賴關系就 ok 的,其實還涉及到通用配置的管理等,那咱們此次的多項目構(gòu)建需要達到哪些目標或者說需要完成哪些需求呢?

多項目配置要求

  • 1 所有的項目都需要使用 Java 插件,web 項目也需要依賴 Java 環(huán)境;
  • 2 web 子項目需打為 war 包;
  • 3 統(tǒng)一配置公共屬性,例如: group,version;
  • 4 統(tǒng)一管理資源庫
  • 5 通用依賴配置,例如 logback 日志功能的引入.

以上就是咱們本次多項目構(gòu)建需要完成的需求,接下來咱們就開始來完成這些需求.

多項目構(gòu)建

1. 創(chuàng)建 root 項目和所有的子模塊項目

  • 1 創(chuàng)建 Gradle 的 Java 項目,ArtifactId:comment
  • 2 在 comment 下創(chuàng)建 Java 模塊,ArtifactId:core
    右鍵->new->Module->Gradle,Java
  • 3 在 comment 下創(chuàng)建 Java 模塊,ArtifactId:model
  • 4 在comment 下創(chuàng)建 web 模塊,ArtifactId:admin
  • 5 在comment 下創(chuàng)建 web 模塊,ArtifactId:web
  • 6 刪除 comment 下的 src,只做模塊管理項目,不寫業(yè)務.

以上操作之后就得到以下項目結(jié)構(gòu)


子項目分布圖

每個模塊都有自己的 build.gradle

Gradle 操作欄
root 項目的 settings.gradle

settings.gradle 主要做模塊管理

2 配置項目依賴

  • 1 model 刪除 junit 依賴
    model 無需測試
dependencies {
  // 空白配置,特殊需求依賴配置,如 lombok 引入
}
  • 2 core 依賴 model
    在 core 的 build.gradle 中配置模塊依賴
dependencies {
    // core 依賴 model 子模塊
    // 模塊的依賴使用 project(":模塊名") 方式.
    compile project(":model")
    testCompile group: 'junit', name: 'junit', version: '4.11'
}
  • 2 admin 和 web 模塊依賴 core 模塊
    在 admin 和 web 模塊的 build.gradle 中配置如下
dependencies {
    // 依賴 core 模塊
    compile project(":core")
}

至此,項目之間的關系就已經(jīng)拉好了,先檢查下是否配置成功,再來看下其他的配置.

image.png

通過 Gradle 管理工具欄可看出依賴已經(jīng)配置成功,接下來處理一些其他的配置.

3 所有項目使用 Java 插件,web項目使用 war

  • 1 配置公用 java 插件引入
    在 comment 項目下的 build.gradle 中將 java 插件和版本引入的配置轉(zhuǎn)到 allprojects 中,因為 root 項目作為管理項目也需要加入 java 插件,所以此處不能使用 subprojects.
allprojects {
    // 統(tǒng)一引入 java 插件和版本指定
    apply plugin :"java"
    sourceCompatibility = 1.8
}
  • 2 刪除所有子模塊項目中的 java 插件引入和版本指定.
  • 3 檢查是否配置成功
    執(zhí)行 core/model->Tasks->build->jar,能導出 jar 即 OK.
    執(zhí)行 admin/web->Tasks->build->war,能導出 war 即 OK.

4 統(tǒng)一公共屬性配置和資源庫

  • 1 統(tǒng)一資源庫配置
    1.1 comment 的build.gradle 中將 repositories 移動到 allprojects/subprojects 中
    1.2 刪除所有子模塊中的資源庫配置項
allprojects {
    // 統(tǒng)一引入 java 插件和版本指定
    apply plugin :"java"
    sourceCompatibility = 1.8
    // 統(tǒng)一指定所有項目的資源庫
    repositories {
        mavenCentral()
    }
}
  • 2 統(tǒng)一屬性配置
    將所有模塊中的 group 和 version 統(tǒng)統(tǒng)配置在comment 的 build.gradle 的 allprojects/subprojects中,子模塊刪除.
subprojects {
    // 統(tǒng)一 group 和 version
    group 'cn.wolfcode.comment'
    version '1.0.0'
}

以上是一種配置,咱們也可以給 project 配置屬性,可用ext 來做拓展,也可用 gradle.properties 來配置.
在 comment 下創(chuàng)建 gradle.properties

// gradle.properties
group=cn.wolfcode.comment
version=1.0.0

5 所有項目引入 logback 日志

在 comment 下 build.gradle 中的allprojects/subprojects 中配置dependencies

allprojects {
    //...
    // 共用依賴配置
    dependencies {
        compile 'ch.qos.logback:logback-classic:1.2.2'
    }
}
image.png

以上多項目構(gòu)建就完成了,接下咱們來回顧下,看下各個模塊目前的配置和關系.

6 模塊配置文件以及關系

image.png

以上則為本次多項目構(gòu)建的全部配置以及關系的羅列,至此咱們就可以開始快樂的使用 Gradle 來完成多項目的構(gòu)建了.

7 核心點

  • 1 在 root 項目的build.gradle 使用allprojects/subprojects 來做公共的配置
  • 2 所有項目使用java,web 項目使用war
  • 3 屬性配置文件的抽取

以上咱們使用 Gradle 實現(xiàn)多項目的構(gòu)建就完美結(jié)束了,剩下的就是寫代碼和測試了.接下來就期待Gradle 的自動化測試介紹吧.

想獲取更多技術視頻,請前往叩丁狼官網(wǎng):http://www.wolfcode.cn/all_article.html

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

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

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