tlias智能学习辅助系统--Maven高级-继承
目录
一、打包方式与应用场景
二、父子工程继承关系
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
:只管理版本,不直接引入
-
-
优势:
-
版本统一,减少冲突
-
配置集中,维护方便
-
模块化清晰,便于协作
-