Spring?Boot父子工程POM依賴關(guān)系舉例詳解
1. 父子工程概述
Spring Boot 父子工程是一種多模塊項目結(jié)構(gòu),通過 Maven 的繼承機(jī)制來管理依賴關(guān)系。這種結(jié)構(gòu)具有以下優(yōu)勢:
- 統(tǒng)一版本管理:所有子模塊使用相同的依賴版本
- 代碼復(fù)用:公共代碼可以提取到獨立模塊
- 模塊化開發(fā):不同功能模塊獨立開發(fā)和維護(hù)
- 依賴隔離:避免循環(huán)依賴,明確模塊職責(zé)
2. 項目結(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)用啟動模塊
└── 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>
<!-- 其他版本號... -->
</properties>
3.4 依賴管理 (dependencyManagement)
重要概念:dependencyManagement 不會直接引入依賴,只是管理版本號。
<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)
所有子模塊都會繼承這些依賴:
<dependencies>
<!-- 所有子模塊都會自動包含這些依賴 -->
<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>
<!-- 依賴外部庫 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!-- 不需要指定版本,由父工程管理 -->
</dependency>
</dependencies>
5. 依賴關(guān)系層次
5.1 依賴傳遞關(guān)系
web (啟動模塊) ├── 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ù)訪問 | api、common、mybatis、redis |
| web | 應(yīng)用啟動、控制器 | service、actuator、devtools |
6. 關(guān)鍵概念解析
6.1 dependencyManagement vs dependencies
- dependencyManagement:版本管理,不引入依賴
- dependencies:實際引入依賴
<!-- 父工程:只管理版本 -->
<dependencyManagement>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencyManagement>
<!-- 子模塊:實際引入依賴 -->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!-- 版本由父工程管理 -->
</dependency>
</dependencies>
6.2 繼承機(jī)制
子模塊自動繼承父工程的:
- 公共依賴
- 版本管理
- 插件配置
- 屬性定義
6.3 依賴作用域 (Scope)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <!-- 僅測試時使用 -->
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional> <!-- 不會傳遞給依賴方 -->
</dependency>
7. 最佳實踐
7.1 版本管理
- 所有版本號統(tǒng)一在父工程
properties中定義 - 使用
${property.name}引用版本號 - 定期更新依賴版本
7.2 模塊劃分
- 按功能職責(zé)劃分模塊
- 避免循環(huán)依賴
- 保持模塊獨立性
7.3 依賴管理
- 公共依賴放在父工程
- 模塊特有依賴放在子模塊
- 合理使用依賴作用域
7.4 構(gòu)建配置
- 只有啟動模塊配置
spring-boot-maven-plugin - 統(tǒng)一編譯和測試插件版本
- 配置合適的打包策略
8. 常見問題
8.1 依賴沖突
- 使用
mvn dependency:tree查看依賴樹 - 在父工程中排除沖突依賴
- 使用
exclusions標(biāo)簽排除傳遞依賴
8.2 版本不一致
- 檢查父工程版本管理是否完整
- 確保子模塊正確繼承父工程
- 驗證
relativePath配置是否正確
8.3 構(gòu)建失敗
- 檢查模塊依賴關(guān)系是否正確
- 驗證插件配置是否兼容
- 確認(rèn) Java 版本設(shè)置一致
9. 總結(jié)
Spring Boot 父子工程通過 Maven 的繼承機(jī)制實現(xiàn)了:
- 統(tǒng)一管理:版本、依賴、插件統(tǒng)一管理
- 模塊化:功能模塊獨立開發(fā)和維護(hù)
- 復(fù)用性:公共代碼和配置復(fù)用
- 可維護(hù)性:清晰的依賴關(guān)系和模塊職責(zé)
這種結(jié)構(gòu)特別適合中大型項目的開發(fā)和維護(hù),能夠有效提高開發(fā)效率和代碼質(zhì)量。
到此這篇關(guān)于Spring Boot父子工程POM依賴關(guān)系的文章就介紹到這了,更多相關(guān)SpringBoot父子工程POM依賴關(guān)系內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot 任務(wù)調(diào)度動態(tài)設(shè)置方式(不用重啟服務(wù))
這篇文章主要介紹了SpringBoot 任務(wù)調(diào)度 動態(tài)設(shè)置方式(不用重啟服務(wù)),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
SpringBoot實現(xiàn)重試機(jī)制的四種方案
在分布式系統(tǒng)和微服務(wù)架構(gòu)中,服務(wù)調(diào)用失敗是不可避免的現(xiàn)象,網(wǎng)絡(luò)不穩(wěn)定、服務(wù)過載、臨時故障等因素都可能導(dǎo)致調(diào)用失敗,重試機(jī)制作為一種處理臨時性故障的解決方案,能夠有效提高系統(tǒng)的可用性,需要的朋友可以參考下2025-04-04
SpringBoot自定義注解之實現(xiàn)AOP切面日志詳解
這篇文章主要為大家詳細(xì)介紹了SpringBoot自定義注解之實現(xiàn)AOP切面統(tǒng)一打印出入?yún)⑷罩?,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-09-09
JAVA并發(fā)中VOLATILE關(guān)鍵字的神奇之處詳解
這篇文章主要給大家介紹了關(guān)于JAVA并發(fā)中VOLATILE關(guān)鍵字的神奇之處的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05

