1. 程式人生 > >Gradle 入門-實現多專案構建

Gradle 入門-實現多專案構建

本文作者:黃少存,叩丁狼高階講師。原創文章,轉載請註明出處。

之前咱們已經學習了Gradle 的基本原理知識點,已經瞭解了 Gradle 構建配置的組成部分以及構建的生命週期,如何進行依賴管理以及如何解決傳遞性依賴衝突.那這一篇咱們來做個實踐,來看下咱們在企業中經常使用到的操作,就是如何在專案中來使用 Gradle 構建工具.咱們先來看下多專案的構建.

多專案構建

在企業中,一個比價複雜的專案往往是分成幾個小專案來協同完成,這就涉及到多專案的構建,而多專案構建咱們需要先來學習一個概念叫"專案模組化".

專案模組化

模組化是指將一個大程式按照功能劃分為若干小程式模組,每個小程式模組完成一個確定的功能,並在這些模組之間建立必要的聯絡,通過模組的互相協作完成整個功能。

在企業專案中,包和類比較多,關係也比較複雜,為了能夠很好的管理和區分這些包和類,咱們會把程式碼拆分成模組,按某些功能點清晰的劃分邊界.比如把業務邏輯和資料持久拆分,比如把所有的 domain 拆分成一個模組,或者大的劃分,把前後臺程式碼拆分成兩個獨立的模組.專案中的模組要符合高內聚低耦合思想.接下咱們來看下如何做多專案構建

多專案構建模組劃分和依賴關係

以下咱們以一個點評網站(comment)的搭建來做模組的劃分和關係的搭建,模組劃分和模組關係如下圖

 

comment 專案模組劃分圖

咱們把點評網專案劃分為4個模組,架構如圖所示,web 和 admin 需要依賴 core 和 model,core 需要依賴 model,由於傳遞性依賴的特點,咱們待會在配置依賴時可以只配置 core 依賴 model,web 和 admin 依賴 core 即可.

有用過 Maven 或者其他構建工具的小夥伴都知道,不管一個專案分為幾個模組,最終都需要有一個 root 專案來統一的管理所有的模組.對 Gradle 來說同樣也不例外,以下咱們先來看下模組之間的關係以及 Gradle 構建指令碼中的配置範圍.

模組關係和構建指令碼配置範圍

image.png

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

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

多專案配置要求

  • 1 所有的專案都需要使用 Java 外掛,web 專案也需要依賴 Java 環境;
  • 2 web 子專案需打為 war 包;
  • 3 統一配置公共屬性,例如: group,version;
  • 4 統一管理資源庫
  • 5 通用依賴配置,例如 logback 日誌功能的引入.

以上就是咱們本次多專案構建需要完成的需求,接下來咱們就開始來完成這些需求.

多專案構建

1. 建立 root 專案和所有的子模組專案

  • 1 建立 Gradle 的 Java 專案,ArtifactId:comment
  • 2 在 comment 下建立 Java 模組,ArtifactId:core
    右鍵->new->Module->Gradle,Java
  • 3 在 comment 下建立 Java 模組,ArtifactId:model
  • 4 在comment 下建立 web 模組,ArtifactId:admin
  • 5 在comment 下建立 web 模組,ArtifactId:web
  • 6 刪除 comment 下的 src,只做模組管理專案,不寫業務.

以上操作之後就得到以下專案結構

 

子專案分佈圖

每個模組都有自己的 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")
}

至此,專案之間的關係就已經拉好了,先檢查下是否配置成功,再來看下其他的配置.

image.png

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

3 所有專案使用 Java 外掛,web專案使用 war

  • 1 配置公用 java 外掛引入
    在 comment 專案下的 build.gradle 中將 java 外掛和版本引入的配置轉到 allprojects 中,因為 root 專案作為管理專案也需要加入 java 外掛,所以此處不能使用 subprojects.
allprojects {
    // 統一引入 java 外掛和版本指定
    apply plugin :"java"
    sourceCompatibility = 1.8
}
  • 2 刪除所有子模組專案中的 java 外掛引入和版本指定.
  • 3 檢查是否配置成功
    執行 core/model->Tasks->build->jar,能匯出 jar 即 OK.
    執行 admin/web->Tasks->build->war,能匯出 war 即 OK.

4 統一公共屬性配置和資源庫

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

以上是一種配置,咱們也可以給 project 配置屬性,可用ext 來做拓展,也可用 gradle.properties 來配置.
在 comment 下建立 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

以上多專案構建就完成了,接下咱們來回顧下,看下各個模組目前的配置和關係.

6 模組配置檔案以及關係

image.png

以上則為本次多專案構建的全部配置以及關係的羅列,至此咱們就可以開始快樂的使用 Gradle 來完成多專案的構建了.

7 核心點

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

以上咱們使用 Gradle 實現多專案的構建就完美結束了,剩下的就是寫程式碼和測試了.接下來就期待Gradle 的自動化測試介紹吧.

想獲取更多技術視訊,請前往叩丁狼官網:http://www.wolfcode.cn/all_article.html