Maven多模块管理

news2024/11/29 4:33:51

Maven多模块管理

在了解怎么进行Maven多模块管理之前,先聊聊为什么要进行Maven多模块管理

为什么要Maven多模块管理?

在传统的单体架构开发下,一个项目中的依赖只需要使用一个pom.xml文件管理即可。但是随着微服务的流行,将原有的单体架构拆分成了多个子模块,每一个模块都有自己的依赖,也就意味着每一个模块都需要一个pom.xml文件进行管理。但是如果每一个子模块都使用单独的pom.xml文件,那么在每一个模块的pom.xml文件中都需要手动指定每一个依赖的版本号,那如果有一天项目中的某一个依赖需要进行版本升级或降级,那么就需要去每一个pom.xml中手动修改依赖版本号,这在项目开发阶段绝对是非常痛苦的,并且不利于对依赖的管理

在这里插入图片描述

在这里插入图片描述

不使用Maven多模块管理还有可能因为误操作导致模块依赖的版本不一致问题

使用Maven进行多模块管理的好处

多模块管理下,会有一个父模块,其他的都是子模块。父模块通常只有一个 pom.xml,没有其他内容。父模块的 pom.xml 一般只定义了各个依赖的版本号、包含哪些子模块以及插件有哪些。不过,要注意的是,如果依赖只在某个子项目中使用,则可以在子项目的 pom.xml 中直接引入,防止父 pom 的过于臃肿

在这里插入图片描述

例如上图,我们在父模块中定义了所有依赖的版本,那么在子模块(用户、订单)中就不需要再定义依赖的版本,因为子模块继承了父模块这些依赖的版本号

优点:

  • 减少重复指定依赖版本号
  • 便于统一管理依赖
  • 降低代码之间的耦合性
  • 模块还规范了代码边界的划分,开发者很容易通过模块确定自己所负责的内容。

了解为什么使用Maven多模块管理,接下来就谈谈如何使用Maven多模块进行管理👇

如何使用Maven进行多模块管理
  1. 创建一个parent父工程(Maven)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 删除src目录,并且给pom.xml文件添加一段<packaging>pom<packagin>

在这里插入图片描述

在这里插入图片描述

​ 表明这个项目不会生成可执行的构建产物(如 JAR、WAR 等),而是用于管理其他子模块

  1. 在当前目录下新建子模块,例如user、order订单模块

    在这里插入图片描述

    在这里插入图片描述

  2. 父模块的pom.xml文件中指定子模块(user、order)

在这里插入图片描述

  1. 在子模块中添加父模块坐标

在这里插入图片描述

  1. 然后在父模块中引入项目需要的依赖

    在这里插入图片描述

  2. 在子模块引入需要的依赖(父模块已经指定过的依赖),就不需要再次指定依赖版本号了

    在这里插入图片描述

总结

Maven多模块管理有几个重要的优点和用途:

  1. 模块化开发: 多模块管理使项目可以按照功能或者逻辑划分成多个独立的模块。每个模块可以专注于解决特定的问题或实现特定的功能,提高了代码的可维护性和可重用性。
  2. 依赖管理: Maven可以在多模块项目中自动管理依赖关系。每个模块可以定义自己的依赖项,并且 Maven 会自动处理这些依赖项的下载和版本管理。这简化了项目配置和维护的过程,减少了依赖管理带来的问题。
  3. 版本控制: 多模块管理使得每个模块都可以独立地进行版本控制。这意味着不同的模块可以在不同的时间点进行独立的发布和更新,而不会影响到其他模块的开发和部署。
  4. 构建优化: Maven可以根据模块之间的依赖关系来优化构建过程。当一个模块发生变化时,Maven只需要重新构建与之相关的模块,而不需要重新构建整个项目,从而提高了构建的效率。
  5. 团队协作: 多模块管理使得团队成员可以并行开发不同的模块,而不会相互干扰。每个模块可以由不同的团队成员负责,并且可以独立地进行测试和部署,从而提高了团队的协作效率。

使用Maven进行多模块管理涉及以下几个步骤:

  1. 创建父项目(Parent Project): 首先,创建一个父项目,作为多模块项目的容器。父项目通常不包含实际的源代码,它主要用于管理子模块的配置信息和共享的依赖项。
  2. 定义子模块(子项目): 在父项目下创建子模块(子项目),每个子模块代表项目中的一个功能模块或者组件。子模块应该包含自己的源代码、资源文件和配置文件等。
  3. 配置父项目: 在父项目的pom.xml文件中配置子模块。通过 元素列出所有的子模块,Maven将根据这些配置来构建整个多模块项目。
  4. 编写子模块的pom.xml文件: 每个子模块都应该有自己的pom.xml文件,用于配置项目的依赖项、构建插件、打包方式等信息。通常,子模块的pom.xml文件会继承父项目的配置,并且可以在此基础上添加子模块特有的配置。

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

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

相关文章

【每日刷题】Day17

【每日刷题】Day17 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 19. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09; 2. 162. 寻找峰值 - 力扣…

详解运算符重载,赋值运算符重载,++运算符重载

目录 前言 运算符重载 概念 目的 写法 调用 注意事项 详解注意事项 运算符重载成全局性的弊端 类中隐含的this指针 赋值运算符重载 赋值运算符重载格式 注意点 明晰赋值运算符重载函数的调用 连续赋值 传引用与传值返回 默认赋值运算符重载 前置和后置重载 前…

使用 Flask-WTF 防止跨站请求攻击(CSRF):一份全面指南

在构建 Web 应用时&#xff0c;防止跨站请求攻击&#xff08;CSRF&#xff09;是一项至关重要的安全措施。CSRF 攻击允许恶意网站执行未经授权的操作&#xff0c;如用户身份验证或数据篡改。幸运的是&#xff0c;Flask-WTF 库为我们提供了强大的 CSRF 保护功能。在本篇博客中&a…

【模拟】Leetcode 数青蛙

题目讲解 1419. 数青蛙 算法讲解 class Solution { public:int minNumberOfFrogs(string croakOfFrogs) {string target "croak";int n target.size();//保存target每个字符的位置indexunordered_map<char, int>index;for(int i 0; i < n; i)index[tar…

Day08React——第八天

useEffect 概念&#xff1a;useEffect 是一个 React Hook 函数&#xff0c;用于在React组件中创建不是由事件引起而是由渲染本身引起的操作&#xff0c;比如发送AJAx请求&#xff0c;更改daom等等 需求&#xff1a;在组件渲染完毕后&#xff0c;立刻从服务器获取频道列表数据…

什么是Rust语言?探索安全系统编程的未来

&#x1f680; 什么是Rust语言&#xff1f;探索安全系统编程的未来 文章目录 &#x1f680; 什么是Rust语言&#xff1f;探索安全系统编程的未来摘要引言正文&#x1f4d8; Rust语言简介&#x1f31f; 发展历程&#x1f3af; Rust的技术意义和优势&#x1f4e6; Rust解决的问题…

HarmonyOS开发实例:【分布式新闻客户端】

介绍 本篇Codelab基于栅格布局、设备管理和多端协同&#xff0c;实现一次开发&#xff0c;多端部署的分布式新闻客户端页面。主要包含以下功能&#xff1a; 展示新闻列表以及左右滑动切换新闻Tab。点击新闻展示新闻详情页。点击新闻详情页底部的分享按钮&#xff0c;发现周边…

Go 之 sync.Mutex 加锁失效现象

我先声明一下&#xff0c;并不是真的加锁失效&#xff0c;而是我之前的理解有误&#xff0c;导致看起来像是加锁失效一样。于是乎记录一下&#xff0c;加深一下印象。 我之前有个理解误区&#xff08;不知道大家有没有&#xff0c;有的话赶紧纠正一下——其实也是因为我这块的…

项目7-音乐播放器5+注册账号

1.前端代码 MAPPER Insert("insert into user(username,password) values (#{username},#{password}) ")Integer insertUserInfo(String username,String password); Service public Result insertUserInfo(String username, String oldpassword,String newpasswo…

算法学习——LeetCode力扣补充篇11(64. 最小路径和、48. 旋转图像 、169. 多数元素、394. 字符串解码、240. 搜索二维矩阵 II )

算法学习——LeetCode力扣补充篇11 64. 最小路径和 64. 最小路径和 - 力扣&#xff08;LeetCode&#xff09; 描述 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只…

测绘管理与法律法规 | 测绘资质管理办法 | 学习笔记

目录 一、测绘资质概述 二、测绘资质分类与等级 三、审批与管理 四、申请条件 五、审批程序 六、测绘资质证书 七、监督管理 八、违规处理 九、特殊规定 十、审批受理时间要点补充 1. 审批机关决定是否受理的时间 2. 审批机关作出批准与否的决定时间 3. 颁发测绘资…

在报表控件 FastReport .NET 中使用 PageCreate 事件

FastReport Business Graphics .NET&#xff0c;是一款基于fastreport报表开发控件的商业图形库&#xff0c;借助 FastReport 商业图形库&#xff0c;您可以可视化不同的分层数据&#xff0c;构建业务图表以进行进一步分析和决策。利用数据呈现领域专家针对 .NET 7、.NET Core、…

论文阅读-Federated-Unlearning-With-Momentum-Degradation

论文阅读-Federated Unlearning With Momentum Degradation 联邦忘却与动量退化 Yian Zhao IEEE Internet of Things Journal 2023 年 10 月 2 日 CCF-C momentum degradation-MoDe 动量退化 memory guidance-记忆引导 knowledge erasure-知识擦除 Deep-learning neural n…

【记录】Python|Selenium 下载 PDF 不预览不弹窗(2024年)

版本&#xff1a; Chrome 124Python 12Selenium 4.19.0 版本与我有差异不要紧&#xff0c;只要别差异太大比如 Chrome 用 57 之前的版本了&#xff0c;就可以看本文。 如果你从前完全没使用过、没安装过Selenium&#xff0c;可以参考这篇博客《【记录】Python3&#xff5c;Sele…

搭建Zookeeper完全分布式集群(CentOS 9 )

ZooKeeper是一个开源的分布式协调服务&#xff0c;它为分布式应用提供了高效且可靠的分布式协调服务&#xff0c;并且是分布式应用保证数据一致性的解决方案。该项目由雅虎公司创建&#xff0c;是Google Chubby的开源实现。 分布式应用可以基于ZooKeeper实现诸如数据发布/订阅…

UE5 C++ 射线检测

一.声明四个变量 FVector StartLocation;FVector ForwardVector;FVector EndLocation;FHitResult HitResult;二.起点从摄像机&#xff0c;重点为摄像机前9999m。射线检测 使用LineTraceSingleByChannel 射线直线通道检测&#xff0c;所以 void AMyCharacter::Tick(float Delt…

c++ qt6.5 打包sqlite组件无法使用,尽然 也需要dll支持!这和开发php 有什么区别!

运行 程序会默认使用当前所在文件夹中的 dll 文件&#xff0c;若文件不存在&#xff0c;会使用系统环境变量路径中的文件&#xff1b;又或者是需要在程序源代码中明确指定使用的 dll 的路径。由于我安装 Qt 时将相关 dll 文件路径都添加到了系统环境变量中&#xff0c;所以即使…

Hbase的shell命令(详细)

一、help 1.help 显示命名的分组情况 2.help 命令名称 查看命令的具体使用&#xff0c;包括命令的作用和用法。 举例&#xff1a;help list 二、general 组&#xff08;普通命令组&#xff09; 命令 描述 …

设计循环队列(队列oj)

1.设计循环队列 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。…

高版本Android studio 使用Markdown无法预览(已解决)

目录 概述 解决方法 概述 本人升级Android studio 当前版本为Android Studio Jellyfish | 2023.3.1 RC 2导致Markdown无法预览。 我尝试了很多网上的方法都无法Markdown解决预览问题&#xff0c;包括升级插件、安装各种和Markdown相关的插件及使用“Choose Boot Java Runtim…