Spring?Boot父子工程POM依賴關(guān)系舉例詳解
1. 父子工程概述
Spring Boot 父子工程是一種多模塊項(xiàng)目結(jié)構(gòu),通過(guò) Maven 的繼承機(jī)制來(lái)管理依賴關(guān)系。這種結(jié)構(gòu)具有以下優(yōu)勢(shì):
- 統(tǒng)一版本管理:所有子模塊使用相同的依賴版本
- 代碼復(fù)用:公共代碼可以提取到獨(dú)立模塊
- 模塊化開發(fā):不同功能模塊獨(dú)立開發(fā)和維護(hù)
- 依賴隔離:避免循環(huán)依賴,明確模塊職責(zé)
2. 項(xiàng)目結(jié)構(gòu)
spring-boot-parent/
├── parent-pom.xml # 父工程POM
├── common/ # 公共工具模塊
│ └── pom.xml
├── api/ # API接口模塊
│ └── pom.xml
├── service/ # 業(yè)務(wù)服務(wù)模塊
│ └── pom.xml
└── web/ # Web應(yīng)用啟動(dòng)模塊
└── pom.xml
3. 父工程 POM 詳解
3.1 基本信息配置
<groupId>com.example</groupId> <artifactId>spring-boot-parent</artifactId> <version>1.0.0</version> <packaging>pom</packaging> <!-- 關(guān)鍵:父工程必須是pom類型 -->
3.2 子模塊聲明
<modules>
<module>common</module>
<module>api</module>
<module>service</module>
<module>web</module>
</modules>
3.3 版本統(tǒng)一管理
<properties>
<spring-boot.version>3.2.0</spring-boot.version>
<spring-cloud.version>2023.0.0</spring-cloud.version>
<mysql.version>8.0.33</mysql.version>
<!-- 其他版本號(hào)... -->
</properties>
3.4 依賴管理 (dependencyManagement)
重要概念:dependencyManagement 不會(huì)直接引入依賴,只是管理版本號(hào)。
<dependencyManagement>
<dependencies>
<!-- Spring Boot 依賴管理 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope> <!-- 導(dǎo)入Spring Boot的依賴管理 -->
</dependency>
<!-- 自定義依賴版本管理 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 內(nèi)部模塊依賴管理 -->
<dependency>
<groupId>com.example</groupId>
<artifactId>common</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
3.5 公共依賴 (dependencies)
所有子模塊都會(huì)繼承這些依賴:
<dependencies>
<!-- 所有子模塊都會(huì)自動(dòng)包含這些依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
3.6 插件管理 (pluginManagement)
<build>
<pluginManagement>
<plugins>
<!-- Spring Boot Maven Plugin -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
</plugins>
</pluginManagement>
</build>
4. 子模塊 POM 詳解
4.1 繼承父工程
<parent>
<groupId>com.example</groupId>
<artifactId>spring-boot-parent</artifactId>
<version>1.0.0</version>
<relativePath>../parent-pom.xml</relativePath>
</parent>
4.2 模塊特有依賴
<dependencies>
<!-- 依賴其他子模塊 -->
<dependency>
<groupId>com.example</groupId>
<artifactId>common</artifactId>
<!-- 不需要指定版本,由父工程管理 -->
</dependency>
<!-- 依賴外部庫(kù) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!-- 不需要指定版本,由父工程管理 -->
</dependency>
</dependencies>
5. 依賴關(guān)系層次
5.1 依賴傳遞關(guān)系
web (啟動(dòng)模塊) ├── service (業(yè)務(wù)服務(wù)) │ ├── api (API接口) │ │ └── common (公共工具) │ └── common (公共工具) └── common (公共工具)
5.2 各模塊職責(zé)
| 模塊 | 職責(zé) | 主要依賴 |
|---|---|---|
| common | 公共工具類、常量、異常 | hutool、fastjson、validation |
| api | API接口定義、DTO | common、swagger |
| service | 業(yè)務(wù)邏輯、數(shù)據(jù)訪問(wèn) | api、common、mybatis、redis |
| web | 應(yīng)用啟動(dòng)、控制器 | service、actuator、devtools |
6. 關(guān)鍵概念解析
6.1 dependencyManagement vs dependencies
- dependencyManagement:版本管理,不引入依賴
- dependencies:實(shí)際引入依賴
<!-- 父工程:只管理版本 -->
<dependencyManagement>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencyManagement>
<!-- 子模塊:實(shí)際引入依賴 -->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!-- 版本由父工程管理 -->
</dependency>
</dependencies>
6.2 繼承機(jī)制
子模塊自動(dòng)繼承父工程的:
- 公共依賴
- 版本管理
- 插件配置
- 屬性定義
6.3 依賴作用域 (Scope)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <!-- 僅測(cè)試時(shí)使用 -->
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional> <!-- 不會(huì)傳遞給依賴方 -->
</dependency>
7. 最佳實(shí)踐
7.1 版本管理
- 所有版本號(hào)統(tǒng)一在父工程
properties中定義 - 使用
${property.name}引用版本號(hào) - 定期更新依賴版本
7.2 模塊劃分
- 按功能職責(zé)劃分模塊
- 避免循環(huán)依賴
- 保持模塊獨(dú)立性
7.3 依賴管理
- 公共依賴放在父工程
- 模塊特有依賴放在子模塊
- 合理使用依賴作用域
7.4 構(gòu)建配置
- 只有啟動(dòng)模塊配置
spring-boot-maven-plugin - 統(tǒng)一編譯和測(cè)試插件版本
- 配置合適的打包策略
8. 常見問(wèn)題
8.1 依賴沖突
- 使用
mvn dependency:tree查看依賴樹 - 在父工程中排除沖突依賴
- 使用
exclusions標(biāo)簽排除傳遞依賴
8.2 版本不一致
- 檢查父工程版本管理是否完整
- 確保子模塊正確繼承父工程
- 驗(yàn)證
relativePath配置是否正確
8.3 構(gòu)建失敗
- 檢查模塊依賴關(guān)系是否正確
- 驗(yàn)證插件配置是否兼容
- 確認(rèn) Java 版本設(shè)置一致
9. 總結(jié)
Spring Boot 父子工程通過(guò) Maven 的繼承機(jī)制實(shí)現(xiàn)了:
- 統(tǒng)一管理:版本、依賴、插件統(tǒng)一管理
- 模塊化:功能模塊獨(dú)立開發(fā)和維護(hù)
- 復(fù)用性:公共代碼和配置復(fù)用
- 可維護(hù)性:清晰的依賴關(guān)系和模塊職責(zé)
這種結(jié)構(gòu)特別適合中大型項(xiàng)目的開發(fā)和維護(hù),能夠有效提高開發(fā)效率和代碼質(zhì)量。
到此這篇關(guān)于Spring Boot父子工程POM依賴關(guān)系的文章就介紹到這了,更多相關(guān)SpringBoot父子工程POM依賴關(guān)系內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于HTTP協(xié)議實(shí)現(xiàn)簡(jiǎn)單RPC框架的方法詳解
RPC全名(Remote?Procedure?Call),翻譯過(guò)來(lái)就是遠(yuǎn)程過(guò)程調(diào)用,本文將為大家介紹如何基于HTTP協(xié)議實(shí)現(xiàn)簡(jiǎn)單RPC框架,感興趣的小伙伴可以了解一下2023-06-06
Spring 單元測(cè)試中如何進(jìn)行 mock的實(shí)現(xiàn)
這篇文章主要介紹了Spring 單元測(cè)試中如何進(jìn)行 mock的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
云IDE:Eclipse Che:Eclipse下一代IDE(推薦)
這篇文章主要介紹了云IDE:Eclipse Che:Eclipse下一代IDE,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
Java開發(fā)人員最常犯的10個(gè)錯(cuò)誤
這篇文章主要介紹了Java開發(fā)人員最常犯的10個(gè)錯(cuò)誤,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
MyBatis 實(shí)現(xiàn)批量插入和刪除中雙層循環(huán)的寫法案例
這篇文章主要介紹了MyBatis 實(shí)現(xiàn)批量插入和刪除中雙層循環(huán)的寫法案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
Java實(shí)現(xiàn)常用加密算法SM3的方式及測(cè)試代碼
這篇文章介紹了SM3算法在Java中的實(shí)現(xiàn)方式,SM3算法是一種密碼散列函數(shù)標(biāo)準(zhǔn),主要用于商用密碼應(yīng)用中的數(shù)字簽名和驗(yàn)證、消息認(rèn)證碼生成和驗(yàn)證、隨機(jī)數(shù)生成等,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10
解決Spring Cloud Feign 請(qǐng)求時(shí)附帶請(qǐng)求頭的問(wèn)題
這篇文章主要介紹了解決Spring Cloud Feign 請(qǐng)求時(shí)附帶請(qǐng)求頭的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
Springboot?maven項(xiàng)目配置文件覆蓋問(wèn)題的處理
這篇文章主要介紹了Springboot?maven項(xiàng)目配置文件覆蓋問(wèn)題的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05

