Maven的聚合工程与继承

目录

一、为什么需要使用Maven工程

二、聚合工程的结构

三、聚合工程实现步骤 

四、父工程统一管理版本

五、编译打包


        大家好,我是jstart千语。想着平时开发项目似乎都是用maven来管理的,并且大多都是聚合工程。而且在maven的聚合工程中,通常与maven继承一起使用。有时候可能会把这两者混淆,所以在这里做一些总结吧。


一、为什么需要使用Maven工程

1、统一依赖和版本

  • 不同模块可能都要用相同的第三方库(如 Spring、MyBatis 等),如果在各自 pom.xml 中单独声明,版本管理非常混乱。

  • 父 POM 通过 <dependencyManagement> 集中声明依赖版本,子模块直接引用即可,实现“统一升级一次、全项目生效”。

2、集中构建与发布

  • 多模块聚合后,只需在父工程执行一次 mvn clean install,即可编译、测试、打包所有子模块。

  • 集中发布时,Maven 会自动按照模块间的依赖顺序来部署,避免手动一个一个打包。

3、复用公共代码

  • 将通用工具、常量、DTO 等抽离到 common 或类似模块中,避免在每个服务里重复实现。

  • 不同服务只需依赖同一个公共模块,既减少重复,又便于统一更新维护。

4、支持灵活的环境配置

  • 父 POM 可以定义多套 Profile(如 devtestprod),根据激活的 Profile 加载不同的资源或插件配置。

  • 各子模块通过继承父配置,实现环境切换无需改各自代码。

二、聚合工程的结构

my-project/

├── pom.xml                     ← 聚合父 POM(packaging = pom)

├── common/                     ← 通用工具模块
│   └── pom.xml

├── service-a/                  ← 服务 A 模块
│   └── pom.xml

├── service-b/                  ← 服务 B 模块
│   └── pom.xml

└── web-app/                    ← Web 前端或 Spring Boot 模块
    └── pom.xml
 

说明:
聚合工程: 
顶层pom.xml所在的模块不包含业务的空工程(只有一个pom.xml文件)

作用:可以将多个编组通过聚合实现对所包含的模块进行同步构建。并且,某个模块发生变化时,其他模块若是与这个模块关联,就要同步更新,此时可以用聚合工程来批量解决。


三、聚合工程实现步骤 

(1)创建一个新的模块:父工程(管理工程),将其打包方式设置为 pom


(2)在父工程下新建模块


 (3)idea自动识别、并添加了相关信息

 


(4)至此,其实一个聚合工程就完成了。我们再多new几个模块试试



四、父工程统一管理版本

在父工程中的 dependencyManagement 标签里引入依赖,这样表示标签下面都是可选依赖,子模块可以按需要引入,并且不需要再指定版本。如:

    <dependencyManagement><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.32</version></dependency></dependencies></dependencyManagement>

并且,在父工程可以引入一些pom文件,用来统一指定框架使用的版本,减少版本冲突 

如:指定springboot相关的依赖都进行统一的版本控制,子模块引入springboot相关的依赖时,都不需要引入版本号了

<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.4.2</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>


并且,还可以在父工程统一更换远程仓库:

<repositories><repository><id>central</id>    <!--表示要替换中央仓库--><name>aliyun maven</name> <!--对该仓库的描述,非必须--><url>https://maven.aliyun.com/repository/central</url> <!--仓库地址--><layout>default</layout> <!--遵循 Maven 的标准目录结构:g a v 形式--><releases><enabled>true</enabled> <!-- 表示允许从该仓库获取发布版本(releases版本)--></releases><snapshots><enabled>true</enabled> <!--表示允许从该仓库获取快照版本(snapshots版本)--></snapshots></repository></repositories>



五、编译打包

将maven打包成jar文件

    <artifactId>demo-starter</artifactId><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>

    <build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.0.RELEASE</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端职业发展:如何规划前端工程师的成长路径?

前端职业发展:如何规划前端工程师的成长路径? 大家好,我是全栈老李。今天咱们聊聊前端工程师的职业发展路径,这个话题看似简单,实则暗藏玄机。就像打游戏升级一样,你得知道下一关是什么,才能提前准备装备和技能点。 前端之路 一般我们从一个新手到大神,普遍需要经过…

【星海出品】分布式存储数据库etcd

etcd 数据库由 CoreOS 公司创建。 https://github.com/etcd-io/etcd api信息 https://etcd.io/docs/v3.5/dev-guide/api_reference_v3/ etcdctl --help etcd 最初由 CoreOS 公司开发&#xff0c;作为其核心项目之一。 CoreOS 成立于 2013 年&#xff0c;专注于容器化技术&#…

2025新版修复蛇年运势测试风水起名系统源码

2025新版修复蛇年运势测试风水起名系统源码 通过网盘分享的文件&#xff1a;2025xbfsysweb.rar 链接: https://pan.baidu.com/s/1r1MOkJJJMj9s9nQX_GzI3Q 提取码: 9weh 备用下载地址&#xff1a;http://pan.1234f.com:5212/s/JK1uw

Vue3 Pinia

一、Pinia 核心概念 Pinia 是 Vue3 官方推荐的状态管理库&#xff0c;相比 Vuex 4&#xff0c;具有以下优势&#xff1a; 更简洁的 API&#xff08;移除 mutations&#xff09; 完整的 TypeScript 支持 支持组合式 API 自动代码分割 轻量级&#xff08;仅 1KB&#xff09;…

音视频小白系统入门课-4

本系列笔记为博主学习李超老师课程的课堂笔记&#xff0c;仅供参阅 往期课程笔记传送门&#xff1a; 音视频小白系统入门笔记-0音视频小白系统入门笔记-1音视频小白系统入门笔记-2音视频小白系统入门笔记-3 将mp4文件转换为yuv文件 ffmpeg -i demo.mp4 # 输入文件-an …

6.2 内容生成与营销:个性化内容创作与营销策略优化

随着消费者对个性化体验的需求日益增长&#xff0c;传统的内容创作与营销方式已难以满足市场竞争的需要。基于大语言模型&#xff08;LLM&#xff09;与智能代理&#xff08;Agent&#xff09;的技术为企业提供了全新的解决方案&#xff0c;能够实现高效、精准、规模化的内容生…

kafka课后总结

Kafka是由LinkedIn开发的分布式发布 - 订阅消息系统&#xff0c;具备高吞吐量、低延迟、可扩展性、持久性、可靠性、容错性和高并发等特性。其主要角色包括Broker、Topic、Partition、Producer、Consumer、Consumer Group、replica、leader、follower和controller。消息系统中存…

DataStreamAPI实践原理——计算模型

引入 通过前面我们对于Flink的理解&#xff0c;我们知道它吸收了 Dataflow 的理念&#xff0c;以及此前已有的流处理系统&#xff08;如 S4、Storm、MillWheel&#xff09;的经验&#xff0c;实现了批流一体化的高效数据处理&#xff0c;并且通过灵活的窗口机制、事件时间与水…

项目笔记1:通用 Service的常见方法

通用 Service 通常封装了常见的业务逻辑操作&#xff0c;以提高代码的复用性和可维护性。不同的框架和业务场景下&#xff0c;通用 Service 的方法会有所差异&#xff0c;但一般都会包含一些基本的增删改查&#xff08;CRUD&#xff09;操作&#xff0c;以下为你详细介绍&#…

阿里云99机器总是宕机,实测还是磁盘性能差

阿里云99计划总是宕机&#xff0c;经过反复排查&#xff0c;最终确认还是磁盘性能差。 阿里云99机器使用的磁盘类型是Entry云盘40GiB (2120 IOPS) 按照官方的一些数据&#xff0c;这个磁盘最小iops是1800最大是6000,实际使用中发现&#xff0c;这个6000值很虚&#xff0c;这个…

Fedora 43 计划移除所有 GNOME X11 相关软件包

Fedora 43 计划移除所有 GNOME X11 相关软件包&#xff0c;这是 Fedora 项目团队为全面拥抱 Wayland 所做的重要决策。以下是关于此计划的详细介绍&#xff1a; 提案内容&#xff1a;4 月 23 日&#xff0c;Neal Gompa 提交提案&#xff0c;建议从 Fedora 软件仓库中移除所有 G…

魔幻预言手游》:职业介绍!

在《魔幻预言》手游中&#xff0c;共有武玄、魔魅、剑仙三大核心职业&#xff0c;各具特色且定位鲜明&#xff0c;以下为具体介绍&#xff1a; 一、武玄&#xff08;战士&#xff09; 核心定位&#xff1a;近战物理输出与团队增益担当&#xff0c;兼具控制与防御能力。 战斗风…

精益数据分析(27/126):剖析用户价值与商业模式拼图

精益数据分析&#xff08;27/126&#xff09;&#xff1a;剖析用户价值与商业模式拼图 在创业和数据分析的领域中&#xff0c;每一次深入学习都是一次成长的契机。今天&#xff0c;我们继续秉持共同进步的理念&#xff0c;深入研读《精益数据分析》&#xff0c;剖析用户价值的…

【SwitchyOmega安装教程】

目录 一、插件安装 1. 下载安装文件 2. 打开浏览器扩展安装页面 3. 安装插件 二、界面详情 三、配置信息 3.1 设置IP 1、查看IP地址信息 2、批量测试IP是否有效 3、点击扩展程序&#xff0c;选择 Proxy SwitchyOmega 4、 点击选项进行配置 5、配置页面 一、插件安装 1…

矫平机终极指南:特殊材料处理、工艺链协同与全球供应链管理

一、特殊材料矫平&#xff1a;挑战与创新解决方案 1. 高温合金&#xff08;如Inconel 718&#xff09;处理 技术难点&#xff1a; 屈服强度高达1100 MPa&#xff0c;传统矫平力不足 高温下易氧化&#xff0c;需惰性气体保护环境 解决方案&#xff1a; 采用双伺服电机驱动&a…

反事实——AI与思维模型【82】

一、定义 反事实思维模型是一种心理认知模型,它指的是人们在头脑中对已经发生的事件进行否定,然后构建出一种可能性假设的思维活动。简单来说,就是思考“如果当时……,那么就会……”的情景。这种思维方式让我们能够超越现实的限制,设想不同的可能性和结果,从而对过去的…

Nginx:支持 HTTPS

文章目录 Nginx 开启 ssl 以支持 HTTPS1 生成本地证书2 开启 ssl 以支持 HTTPS3 将 https 的请求转发给 http 最终的 nginx.conf 如下 Nginx 开启 ssl 以支持 HTTPS [!IMPORTANT] 在下文中&#xff0c;将采用如下定义。 HTTP端口&#xff1a; 80 HTTPS端口&#xff1a; 443 服务…

[计算机科学#2]:从继电器到晶体管的电子计算机发展史(庞然大物的进化)

【核知坊】&#xff1a;释放青春想象&#xff0c;码动全新视野。 我们希望使用精简的信息传达知识的骨架&#xff0c;启发创造者开启创造之路&#xff01;&#xff01;&#xff01; 内容摘要&#xff1a;本文讲述了20世纪初至1950年代计算机技术的发展历程…

【ESP32S3】Cache 框图和操作

ESP32-S3 采用双核共享 ICache (指令缓存) 和 DCache &#xff08;数据缓存&#xff09; 结构&#xff0c;如下图所示。以便当 CPU 的指令总线和数据总线同时发起请求时&#xff0c;也可以迅速响应&#xff1a; Cache 的存储空间与内部存储空间可以复用。具体为 Internal SRAM0…

wireshark从HEX转储导入使用方法

官方资料: https://www.wireshark.org/docs/wsug_html_chunked/ChIOImportSection.html 方法1&#xff1a; 文本文件&#xff0c;纯内容导入: ff ff ff ff ff ff 00 00 00 00 5f 0f 08 06 00 01 08 00 06 04 00 01 00 00 00 00 5f 0f 64 01 60 10 00 00 00 00 00 00 64 01 01…