Maven多模块管理

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.mzph.cn/news/824533.shtml

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

相关文章

【IT运维入门(ITHW)系列】之「快速部署」第二期清单(持续更新)

ITHW是Information Technology Hello World的缩写简拼。意在提供IT领域的入门相关知识&#xff0c;近期给大家带来的是主流技术选型的快速部署系列&#xff0c;意在最大程度地简化部署过程&#xff0c;以便能快速体验或测试相关技术选型。 「快速部署」第一期清单 ITHW快捷部署…

Python零基础从小白打怪升级中~~~~~~~多线程

线程安全和锁 一、全局解释器锁 首先需要明确的一点是GIL并不是Python的特性&#xff0c;它是在实现Python解析器(CPython)时所引入的一个概念。 GIL全称global interpreter lock&#xff0c;全局解释器锁。 每个线程在执行的时候都需要先获取GIL&#xff0c;保证同一时刻只…

MR-JE-70A 三菱MR-JE伺服驱动器(750W通用型)

三菱MR-JE伺服驱动器(750W通用型) MR-JE-70A外部连接,MR-JE-70A用户手册,MR-JE-70A 三相或单相AC220V三菱通用型伺服放大器750W&#xff0c;配套电机HG-SN52J-S100、HG-KN73J-S100。 MR-JE-70A参数说明&#xff1a;伺服驱动器通用型750W&#xff0c;三相或单相AC200V~240V 三…

Dual-AMN论文阅读

Boosting the Speed of Entity Alignment 10: Dual Attention Matching Network with Normalized Hard Sample Mining 将实体对齐速度提高 10 倍&#xff1a;具有归一化硬样本挖掘的双重注意力匹配网络 ABSTRACT 寻找多源知识图谱(KG)中的等效实体是知识图谱集成的关键步骤&…

使用Flask和Flask-JWT-Extended保护API免受跨站请求攻击

在本文中&#xff0c;我们将探讨如何使用Flask和Flask-JWT-Extended库来保护您的API免受跨站请求攻击&#xff08;CSRF&#xff09;。我们将首先简要介绍CSRF攻击的概念&#xff0c;然后详细说明如何使用Flask-JWT-Extended库来保护您的API。 什么是跨站请求攻击&#xff08;C…

CSS文本属性与字体属性

目录 文本属性 文本颜色 文本对齐 修饰文本 文本缩进 行高 字体属性 字体系列 字体大小 字体粗细 字体样式 字体/文本综合属性写法 Chrome调试工具的使用 文本属性 文本颜色 在CSS中使用color 属性用于定义文本的颜色&#xff0c;使用background-color设置一个盒…

Adobe Acrobat PDF 2024

Adobe Acrobat PDF 2024正式发布&#xff01;支持Windows和macOS系统&#xff0c;新界面做了轻微调整。 下载地址 Windows客户端&#xff1a;https://www.123pan.com/s/f43eVv-GKZKd.html macOS客户端&#xff1a;https://www.123pan.com/s/f43eVv-PKZKd.html

带缓存的输入输出流(I/O)

文章目录 前言一、带缓冲的输入输出流是什么&#xff1f;二、使用方法 1.BufferedInputStream与BufferedOutputStream类2.BufferedReader与BufferedWriter类总结 前言 输入输出流可以视为&#xff0c;从A点把货物搬运至B点。那么带缓冲的意思可以视为用货车把A点的货物搬运至B点…

[ ROS入门]

00ROS实现流程大致分为5步 先创建一个工作空间&#xff1b;再创建一个功能包&#xff1b;编辑源文件&#xff1b;编辑配置文件&#xff1b;编译并执行。 01创建工作空间 02进入src创建ros包并添加依赖 上述命令&#xff0c;会在工作空间下生成一个功能包&#xff0c;该功能包依…

关于外网java后端服务访问内网minio中间件,因连接minio超时,启动失败问题

注&#xff1a;服务器情况&#xff1a;2台服务器&#xff0c;内网服务器包含&#xff08;activemq、minio、nginx、redis、mysql、后端java服务&#xff09;。外网服务器只有后端java服务&#xff0c;访问内网的中间件&#xff08;内网服务器开放了部分指定端口&#xff09; 问…

Unity应用开机自启动

使用说明 以代码设置的方式设置Unity应用开机自启动。 将下面脚本挂载到场景物体&#xff0c;通过UI按钮开启应用自启动和取消应用自启动&#xff0c;设置下次运行应用生效。 所用到的Dll下载地址&#xff1a;Interop.IWshRuntimeLibrary 脚本代码 using System; using Syst…

将本地项目推送至gitlab仓库

1. gitlab上新建一个空白项目 gitlab上点击new project按钮&#xff0c;新建一个项目 新建空白项目 项目名称与本地新建项目名称相同&#xff0c;其余根据具体需要选择 2. 初始化本地仓库并commit项目 进入本地项目根目录下&#xff0c;右击 git bash here打开命令窗口 初始化…

Netty-NioServerSocketChannel与NioSocketChannel

NioServerSocketChannel NioServerSocketChannel是netty服务端的channel。在ServerbootStrap的bind方法中&#xff0c;通过反射&#xff0c;实例化对象NioServerSocketChannel。   NioServerSocketChannel对象实例化的过程中。 AbstractChannel中实例化channel的id&#xff…

3DGS渐进式渲染 - 离线生成渲染视频

总览 输入&#xff1a;环绕Object拍摄的RGB视频 输出&#xff1a;自定义相机路径的渲染视频&#xff08;包含渐变效果&#xff09; 实现过程 首先&#xff0c;编译3DGS的C代码&#xff0c;并跑通convert.py、train.py和render.py。教程如下&#xff1a; github网址&#xf…

HarmonyOS开发实例:【分布式数据服务】

介绍 分布式数据服务(Distributed Data Service&#xff0c;DDS)为应用程序提供不同设备间数据分布式的能力。通过调用分布式数据接口&#xff0c;应用程序将数据保存到分布式数据库中。通过结合帐号、应用和分布式数据服务对属于不同的应用的数据进行隔离&#xff0c;保证不同…

Java项目实现Excel导出(Hutool)

官网&#xff1a; Excel生成-ExcelWriter (hutool.cn) 1.使用Hutool工具实现Excel导出&#xff08;.xlsx格式&#xff09; 业务场景&#xff1a; 使用SpringCloudmysqlmybatis-plus需要将数据库中的数据导出到Excel文件中 前端为Vue2 第零步&#xff1a;导入依赖 <!-…

ASP.NET Core 标识(Identity)框架系列(四):闲聊 JWT 的缺点,和一些解决思路

前言 前面的几篇文章讲了很多 JWT 的优点&#xff0c;但作为技术人员都知道&#xff0c;没有一种技术是万能的 “银弹”&#xff0c;所谓有矛就有盾&#xff0c;相比 Session、Cookie 等传统的身份验证方式&#xff0c;JWT 在拥有很多优点的同时&#xff0c;也有着不可忽视的缺…

49.HarmonyOS鸿蒙系统 App(ArkUI)Tab导航组件的使用

HarmonyOS鸿蒙系统 App(ArkUI)Tab导航组件的使用 图片显示 Row() {Image($r(app.media.leaf)).height(100).width(100)Image($r(app.media.icon)).height(100).width(100) } 左侧导航 import prompt from ohos.prompt; import promptAction from ohos.promptAction; Entry C…

适用于Windows电脑的最佳数据恢复软件是哪些?10佳数据恢复软件

丢失我们系统中可用的宝贵信息是很烦人的。我们可以尝试几种手动方法来重新获取丢失的数据。然而&#xff0c;当我们采用非自动方法来恢复数据时&#xff0c;这是一项令人厌烦和乏味的工作。在这种情况下&#xff0c;我们可以尝试使用一些正版硬盘恢复软件进行数据恢复。此页面…

pytest学习-pytorch单元测试

pytorch单元测试 一.公共模块[common.py]二.普通算子测试[test_clone.py]三.集合通信测试[test_ccl.py]四.测试命令五.测试报告 希望测试pytorch各种算子、block、网络等在不同硬件平台,不同软件版本下的计算误差、耗时、内存占用等指标. 本文基于torch.testing._internal 一…