目錄
一、打包方式與應用場景
二、父子工程繼承關系
1. 父工程配置
2. 子工程配置
三、自定義屬性與引用屬性
1. 定義屬性
2. 在 dependencyManagement 中引用
3. 子工程中引用
四、dependencyManagement 與 dependencies 的區別
五、項目結構示例
六、小結
在實際開發中,尤其是 Spring Boot 多模塊項目,我們經常會用到 父工程 + 多個子工程 的結構,以統一管理依賴、版本、打包方式等配置。
本文將帶你一步步搞清楚:
-
多模塊項目的打包方式(jar、war、pom)
-
父子工程的繼承關系
-
自定義屬性與引用屬性
-
依賴管理(dependencyManagement vs dependencies)
一、打包方式與應用場景
Maven 項目的 <packaging>
決定了它的打包類型,不同類型適用場景不同:
打包方式 | 說明 | 場景 |
---|---|---|
jar | 普通 Java 項目打成 jar 包 | Spring Boot 項目常用(內嵌 Tomcat 運行) |
war | Web 應用打成 war 包 | 部署到外部 Tomcat/Jetty 等服務器 |
pom | 聚合工程/父工程,不打包代碼 | 用于統一管理依賴、插件和版本 |
提示:多模塊項目的父工程一般用
pom
打包。
二、父子工程繼承關系
1. 父工程配置
父工程使用 pom 打包方式,并可繼承 Spring Boot 官方的 spring-boot-starter-parent
作為基礎配置。
父工程 pom.xml
示例:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.10</version><relativePath/> <!-- 從倉庫查找,而不是本地路徑 -->
</parent><groupId>com.itheima</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
2. 子工程配置
子工程需要通過 <parent>
標簽指定父工程信息,這樣可以繼承父工程的依賴和插件配置。
子工程 pom.xml
示例:
<parent><groupId>com.itheima</groupId><artifactId>tlias-parent</artifactId><version>1.0-SNAPSHOT</version><relativePath>../tlias-parent/pom.xml</relativePath>
</parent><groupId>com.itheima</groupId>
<artifactId>tlias-pojo</artifactId>
<version>1.0-SNAPSHOT</version>
注意:
-
配置了
<parent>
后,groupId
可以省略(會繼承父工程的)。 -
relativePath
用于指定父工程 pom 的相對路徑(不寫會從倉庫中找)。
三、自定義屬性與引用屬性
在父工程中,我們可以用 <properties>
定義版本號等屬性,方便全局統一管理。
1. 定義屬性
<properties><lombok.version>1.18.30</lombok.version><jjwt.version>0.9.1</jjwt.version>
</properties>
2. 在 dependencyManagement 中引用
<dependencyManagement><dependencies><!-- JWT 令牌 --><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jjwt.version}</version></dependency></dependencies>
</dependencyManagement>
3. 子工程中引用
<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency>
</dependencies>
優勢:
-
集中管理版本號,方便升級
-
保證所有模塊使用相同版本,避免沖突
四、dependencyManagement 與 dependencies 的區別
作用 | 是否直接引入依賴 | 是否統一管理版本 | 子模塊是否需顯式聲明依賴 |
---|---|---|---|
dependencies | ? 是 | ? 否 | ? 不需要 |
dependencyManagement | ? 否 | ? 是 | ? 需要顯式聲明依賴(無需指定版本) |
總結:
-
dependencies
:直接聲明依賴,項目立刻可以用。 -
dependencyManagement
:只管理版本,不直接引入,子模塊需自己聲明依賴。
五、項目結構示例
tlias-parent (父工程,packaging=pom)
│── tlias-pojo (實體模塊)
│── tlias-utils (工具模塊)
└── tlias-web-management (Web 模塊)
-
tlias-parent
-
繼承
spring-boot-starter-parent
-
定義公共依賴版本(properties)
-
統一管理依賴版本(dependencyManagement)
-
-
tlias-pojo / tlias-utils / tlias-web-management
-
繼承父工程
-
按需添加依賴(無需指定版本)
-
六、小結
-
父工程:
packaging=pom
,繼承spring-boot-starter-parent
,集中管理依賴版本。 -
子工程:通過
<parent>
繼承父工程,減少重復配置。 -
屬性管理:在父工程
<properties>
定義版本號,全局統一使用。 -
依賴管理:
-
dependencies
:直接引入依賴 -
dependencyManagement
:只管理版本,不直接引入
-
-
優勢:
-
版本統一,減少沖突
-
配置集中,維護方便
-
模塊化清晰,便于協作
-