0. 前言
相比起 Maven 的 XML 配置方式,Gradle 提供了一套簡(jiǎn)明的 DSL 用于構(gòu)建Java 項(xiàng)目,使我們就像編寫(xiě)程序一樣編寫(xiě)項(xiàng)目構(gòu)建腳本。
本文將從無(wú)到有創(chuàng)建一個(gè)用 Gradle 構(gòu)建的多模塊 Spring Boot 項(xiàng)目,JDK 版本為8,IDEA 版本為 2022.3.1 。
1. 創(chuàng)建項(xiàng)目
打開(kāi)IDEA,選擇菜單:File -> New -> Project,在其中找到 Spring Initializr,創(chuàng)建一個(gè)全新的 demo 項(xiàng)目,創(chuàng)建成功后結(jié)構(gòu)如下:
之后,程序會(huì)自動(dòng)下載 Gradle 安裝包,并且通過(guò) Gradle 下載和引入的 jar 包。由于默認(rèn)使用的鏡像速度較慢,我們可以先取消下載,等后面配置好國(guó)內(nèi)鏡像后再重新下載,當(dāng)然也可以慢慢等。
2. Gradle說(shuō)明
在這里就不介紹Gradle 的優(yōu)缺點(diǎn)了,只說(shuō)一下本項(xiàng)目涉及的部分:
- build.gradle :管理依賴(lài)包的配置文件(相當(dāng)于Maven的pom.xml)。
- gradlew :Gradle 命令的包裝,當(dāng)機(jī)器上沒(méi)有安裝 Gradle 時(shí),可以直接用 gradlew 命令來(lái)構(gòu)建項(xiàng)目。
- settings.gradle :可以視為多模塊項(xiàng)目的總目錄, Gradle 通過(guò)它來(lái)構(gòu)建各個(gè)模塊,并組織模塊間的關(guān)系。
- gradle/wrapper包 :Gradle 的一層包裝,能夠讓機(jī)器在不安裝 Gradle 的情況下運(yùn)行程序,便于在團(tuán)隊(duì)開(kāi)發(fā)過(guò)程中統(tǒng)一 Gradle 構(gòu)建的版本, 推薦使用 。
- gradle.properties :需手動(dòng)創(chuàng)建,配置gradle環(huán)境變量,或配置自定義變量供 build.gradle 使用。
3. Gradle最佳實(shí)踐
接下來(lái),講一下我個(gè)人使用 Gradle 的一些經(jīng)驗(yàn)。
- 修改 gradle-wrapper.properties 中的 Gradle 下載鏡像改為國(guó)內(nèi)鏡像。
- 新建 gradle.properties 文件,配置 Gradle 參數(shù),提升構(gòu)建速度。
- 將 maven 倉(cāng)庫(kù)地址改為國(guó)內(nèi)地址
- 將經(jīng)常變更的依賴(lài)包版本、 maven 庫(kù)地址等變量提取到 gradle.properties 里, build.gradle 可直接讀取使用。
- 使用 buildscript 方式引用 gradle plugins ,優(yōu)點(diǎn)是可以使用自定義倉(cāng)庫(kù),且便于子模塊繼承。
- 新建 spring.gradle 配置文件,引用相關(guān)的 Spring 依賴(lài)包。
- 在 build.gradle 里添加引用本地jar包的語(yǔ)句,這樣配置后,倉(cāng)庫(kù)中沒(méi)有的jar包,放到 src/libs 文件夾下就可以直接使用了,非常方便。
- 在 build.gradle 中添加一個(gè)拷貝 jar 包的 task ,在 build 或 bootJar 后執(zhí)行,用于將子模塊打包后,拷貝到根目錄下。
4. 項(xiàng)目模塊劃分
4.1. 拆分思路
新項(xiàng)目默認(rèn)是一個(gè)單模塊的 SpringBoot 工程,而我們要將其改造為一個(gè)多模塊項(xiàng)目,思路是,將項(xiàng)目拆分為多個(gè)子模塊,分為三類(lèi): 服務(wù)、模塊、組件 :
- 項(xiàng)目 :最頂級(jí),與服務(wù)是一對(duì)多的關(guān)系,本項(xiàng)目為根目錄;
- 服務(wù) :對(duì)應(yīng)一個(gè)可啟動(dòng)的 SpringBoot 工程,一般只有一個(gè)啟動(dòng)類(lèi),建議根據(jù)服務(wù)器資源和團(tuán)隊(duì)規(guī)模劃分,與模塊是一對(duì)多的關(guān)系,位置在 services 包下;
- 模塊 :對(duì)應(yīng)一個(gè)完整的業(yè)務(wù),模塊間邊界清晰,將不同的業(yè)務(wù)解耦,便于擴(kuò)展和維護(hù),位置在 modules 包下;
- 組件 :將公用的代碼部分提取為一個(gè)個(gè)組件,供不同的模塊調(diào)用,與模塊是多對(duì)多的關(guān)系,位置在 components 包下。
4.2. 拆分實(shí)踐
- 服務(wù) :創(chuàng)建一個(gè)示例服務(wù):demo-boot
- 模塊 :只是個(gè)框架,沒(méi)有承載業(yè)務(wù),象征性的建一個(gè)系統(tǒng)管理模塊:demo-system ,任何系統(tǒng)都能用到;
- 組件 :建一個(gè)放工具類(lèi)的組件:demo-common ,所有模塊都會(huì)用到。
4.3. 具體配置
- 聲明子模塊 :在根目錄下的 settings.gradle 里聲明各個(gè)模塊:
- 服務(wù)公共依賴(lài) :在 services/build.gradle 里引用一些所有服務(wù)公用的一些依賴(lài)包,這里使用了 subprojects,表示應(yīng)用于所有 services 包下的子模塊,我們通過(guò) sourceSet 的方式將根目錄 src 下的文件,作為公共代碼集成到每個(gè)服務(wù)中。
- 服務(wù)包含模塊 :在 services/demo-boot/build.gradle 里引用模塊 demo-system
- 模塊公共依賴(lài) :在 modules/build.gradle 里引用一些所有模塊公用的一些依賴(lài)包,這里我們引用本地 src/libs 文件夾下的本地jar包。
- 模塊包含組件 :在 modules/demo-system/build.gradle 里引用組件 demo-common
4.4. 代碼結(jié)構(gòu)
每次修改 Gradle 配置后,需要刷新生效(可改為自動(dòng))
-
模塊
+關(guān)注
關(guān)注
7文章
2811瀏覽量
52277 -
JAVA
+關(guān)注
關(guān)注
20文章
2992瀏覽量
114735 -
程序
+關(guān)注
關(guān)注
117文章
3832瀏覽量
84331 -
spring
+關(guān)注
關(guān)注
0文章
341瀏覽量
15566 -
gradle
+關(guān)注
關(guān)注
0文章
26瀏覽量
970
發(fā)布評(píng)論請(qǐng)先 登錄
Spring Boot如何實(shí)現(xiàn)異步任務(wù)
Spring Boot Starter需要些什么

啟動(dòng)Spring Boot項(xiàng)目應(yīng)用的三種方法
Spring Boot嵌入式Web容器原理是什么
Spring Boot從零入門(mén)1 詳述
「Spring認(rèn)證」什么是Spring GraphQL?

Spring Boot特有的實(shí)踐
強(qiáng)大的Spring Boot 3.0要來(lái)了
怎樣使用Kiuwan保護(hù)Spring Boot應(yīng)用程序呢?
如何通過(guò)IDEA快速建立一個(gè)Spring Boot項(xiàng)目

Spring Boot Web相關(guān)的基礎(chǔ)知識(shí)
Spring Boot Actuator快速入門(mén)
Spring Boot啟動(dòng) Eureka流程

Spring Boot的啟動(dòng)原理

評(píng)論