【JavaWeb后端学习笔记】Maven项目管理

news/2024/12/15 0:33:59/

Maven

  • 1、分模块设计
  • 2、Maven继承
    • 2.1 继承关系
    • 2.2 版本锁定
  • 3、Maven聚合
  • 4、聚合与继承的关系

1、分模块设计

如果一个项目中含有大量的功能模块。可以考虑将这些功能分模块设计,逐一进行开发。例如将公共类可以定义在一个项目中,将通用工具类也放在一个项目中,其他业务模块需要使用这些类或者工具,只需要在pom文件中引入它们的依赖坐标。

<dependencies><dependency><groupId>组织ID</groupId><artifactId>项目</artifactId><version>版本</version></dependency>...<dependency><groupId>组织ID</groupId><artifactId>项目</artifactId><version>版本</version></dependency>
</dependencies>

2、Maven继承

2.1 继承关系

在一个大型项目中,子模块非常多,如果这些子模块都需要一个共同的依赖,那么可以给这些子模块的父工程的pom文件中加入这项依赖,子模块中就不需要再加这个依赖了。这是因为子模块继承了父工程的pom文件中的依赖。

Maven继承的作用就是简化依赖配置,统一管理依赖;

指定继承关系,需要在子工程的pom文件中加入

<parent><!-- 父工程坐标 2.3.3--><groupId>组织ID</groupId><artifactId>项目</artifactId><version>版本</version><relativePath>父工程pom文件相对路径</relativePath>
</parent>

父工程需要指定打包方式为pom。在父工程pom文件中加:

<packaging>pom</packaging>

注意,如果父工程与子工程都引入了同一个依赖的不同版本,以子工程的为准。

2.2 版本锁定

在Maven中,可以在父工程的pom文件中通过dependencyManagement标签来统一管理依赖版本。

例如在一个大型项目中,有部分子模块引入了同一个依赖,当要改变依赖版本时,则需要在所有子模块中查找是否引入了这个依赖,这个过程相当繁琐。这时就可以通过Maven的版本锁定来解决这个问题。

子模块引入依赖时不指定版本,只需指定groupId和artifactId。把版本交给父工程管理。
在父工程中使用dependencyManagement标签管理版本:

<dependencyManagement><dependencies><dependency><groupId>组织ID</groupId><artifactId>项目</artifactId><version>指定版本</version> </dependency>...</dependencies>
</dependencyManagement>

dependencyManagement标签只会管理依赖版本,不会直接把依赖加入进来。

自定义属性与属性引用
自定义属性与属性引用方便集中统一管理依赖版本。
通过properties标签自定义属性:

<!-- 自定义属性 -->
<properties><jjwt.version>0.9.1</jjwt.version><lombok.version>1.18.24</lombok.version>
</properties>

通过${…}引用属性:

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jwtt.version}</version> 
</dependency>

3、Maven聚合

在分模块开发时,如果需要打包一个项目,那么这个项目依赖的其他子项目需要先安装在Maven本地,父工程也需要安装在本地,再对此项目进行打包操作。这个操作比较复杂。所以Maven聚合实现一键构建,一键打包,一键运行。

聚合,也就是将多个模块组织成一个整体,同时进行项目构建。

聚合工程:一个不具有业务功能的“空”工程(有且仅有一个pom文件)。一般父工程会同时起到聚合工程的作用。
聚合工程的作用就是快速构建项目,无需根据依赖关系手动构建,直接在聚合工程上构建即可。

Maven中通过modules标签设置当前聚合工程所包含的子模块名称。

<!--- 聚合 --->
<modules><module> 子模块相对路径 </module><module>../prj_utils</module><module>../prj_common</module>...
</modules>

4、聚合与继承的关系

  1. 作用:
    • 聚合用于快速构建项目
    • 继承用于简化依赖配置,统一管理依赖
  2. 相同点 :
    • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中。
    • 聚合与继承均属于设计型模块,并无实际的模块内容
  3. 不同点:
    • 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些
    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

http://www.ppmy.cn/news/1555153.html

相关文章

企业微信可信域名个人配置方法,个人添加企业微信可信IP方法5.0版本,无论是否企业认证都通用。

自动22年11月份开始更新企业微信可信域名配置方法后&#xff0c;先后阿里&#xff08;22年11月&#xff09;1.0可信域名配置方法、腾讯&#xff08;2022年12月14日&#xff09;2.0版本可信域名配置方法、百度&#xff08;2023年1月27日&#xff09;、华为&#xff08;2023年2月…

yolov9目标检测报错AttributeError: ‘list‘ object has no attribute ‘device‘

深度学习 文章目录 深度学习前言 前言 yolov9运行自己训练的模型时&#xff0c;出现以下错误&#xff1a; rootb219ae83c78f:/yolov9# python detect.py --source ./data/images/horses.jpg --img 640 --device 0 --weights runs/train/yolov9-c8/weights/best.pt --name yol…

Nginx反向代理与负载均衡应用实践

Nginx反向代理与负载均衡应用实践 1.1 集群简介 简单地说 &#xff0c;集群就是指一组&#xff08;若干个&#xff09;相互独立的计算机 &#xff0c;利用高速通信网络组成的一 个较大的计算机服务系统 &#xff0c;每个集群节点&#xff08;即集群中的每台计算机&#xff09;…

【卷积神经网络】LeNet实践

模型建立 数据初始化根据模型搭建前向传播打印模型结构 前向传播数据初始化 def __init__(self):super(LeNet, self).__init__()# 第一层卷积层&#xff1a;# 输入&#xff1a;灰度图像 (1通道&#xff0c;大小 28x28)# 输出&#xff1a;6个特征图 (大小 28x28, 通过padding2保…

LLMs之Llama-3:Llama-3.3的简介、安装和使用方法、案例应用之详细攻略

LLMs之Llama-3&#xff1a;Llama-3.3的简介、安装和使用方法、案例应用之详细攻略 目录 相关文章 LLMs之LLaMA&#xff1a;LLaMA的简介、安装和使用方法、案例应用之详细攻略 LLMs之LLaMA-2&#xff1a;LLaMA 2的简介(技术细节)、安装、使用方法(开源-免费用于研究和商业用途…

使用elasticsearch-java客户端API生成DSL语句

在Elasticsearch7.15.0之后&#xff0c;官方提供了elasticsearch-java包作为java客户端工具包&#xff0c;用于取代elasticsearch-rest-high-level-client&#xff0c;其底层依然依赖Elasticsearch Low Level REST 客户端&#xff0c;即elasticsearch-rest-client。 elasticsea…

ssm-springmvc-学习笔记

简介 简单的来说&#xff0c;就是一个在表述层负责和前端数据进行交互的框架 帮我们简化了许多从前端获取数据的步骤 springmvc基本流程 用户在原本的没有框架的时候请求会直接调用到controller这个类&#xff0c;但是其步骤非常繁琐 所以我们就使用springmvc进行简化 当用…

docker简单私有仓库的创建

1&#xff1a;下载Registry镜像 导入镜像到本地中 [rootlocalhost ~]# docker load -i registry.tag.gz 进行检查 2&#xff1a;开启Registry registry开启的端口号为5000 [rootlocalhost ~]# docker run -d -p 5000:5000 --restartalways registry [rootlocalhost ~]# dock…