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-11SpringBoot實現(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-04SpringBoot自定義注解之實現(xiàn)AOP切面日志詳解
這篇文章主要為大家詳細(xì)介紹了SpringBoot自定義注解之實現(xiàn)AOP切面統(tǒng)一打印出入?yún)⑷罩荆闹惺纠a介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-09-09JAVA并發(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