当前位置: 首页 > news >正文

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 运行)
warWeb 应用打成 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

    • 继承父工程

    • 按需添加依赖(无需指定版本)


六、小结

  1. 父工程packaging=pom,继承 spring-boot-starter-parent,集中管理依赖版本。

  2. 子工程:通过 <parent> 继承父工程,减少重复配置。

  3. 属性管理:在父工程 <properties> 定义版本号,全局统一使用。

  4. 依赖管理

    • dependencies:直接引入依赖

    • dependencyManagement:只管理版本,不直接引入

  5. 优势

    • 版本统一,减少冲突

    • 配置集中,维护方便

    • 模块化清晰,便于协作

http://www.dtcms.com/a/328103.html

相关文章:

  • 北京JAVA基础面试30天打卡08
  • C++动态代理技术详解:实现原理与应用场景
  • Java静态代理和动态代理
  • Linux驱动开发probe字符设备的完整创建流程
  • 【游戏优化笔记】开发中如何减少建筑和树木等环境元素的资源消耗?
  • 【RHCE】自动化备份全网服务器数据平台
  • 36-综合案例开发-2
  • Chrome插件开发【manifest.json】
  • 【传奇开心果系列】Flet框架桌面程序组件Custom Ribbon自定义组件模板
  • Class34锚框
  • 分享单位开通固定公网IP,不需要找运营商申请
  • sqli-libs通关教程(41-50)
  • lesson36:MySQL从入门到精通:全面掌握数据库操作与核心原理
  • Elasticsearch JS 客户端子客户端(Child Client)实践指南
  • DAY38作业(补)
  • CTO如何通过录音转写和音频降噪,提升企业远程协作效率?
  • Secure 第四天作业
  • Linux环境部署RocketMQ
  • C++算法·排序
  • 第六十四章:AI的“觅食”之路:数据采集器设计与多源数据获取
  • DL-FWI 的三项主要任务: 网络构建, 数据生成, 训练控制
  • 跑腿APP开发未来趋势:同城O2O系统源码在智能调度与个性化中的进化
  • Spring Boot项目中调用第三方接口
  • HCIP项目之OSPF综合实验
  • Flux.1系列模型解析--Kontext
  • 8月12号打卡
  • 【Leetcode hot 100】560.和为K的子数组
  • 无人机航拍数据集|第13期 无人机城市斑马线目标检测YOLO数据集963张yolov11/yolov8/yolov5可训练
  • 为什么304不锈钢仍会生锈?
  • Ubuntu20.06环境下安装VS Code及中文设置方法