Maven深入了解

Maven深入了解

  • 前言
  • 一、Maven的核心概念
    • 1.1 Maven-Jar包+模块化管理
    • 1.2 POM
    • 1.3 坐标及其命名规范
    • 1.4 仓库的概念
    • 1.5 生命周期
    • 1.6 插件和目标
  • 二、依赖管理
    • 2.1 自己写的模块和模块之间也可以互相依赖
    • 2.2 依赖的生效范围(scope标签)
    • 2.3 依赖的传递性
    • 2.4 依赖冲突问题
    • 2.5 依赖的排除
    • 2.6 依赖版本统一管理
  • 三、继承
    • 3.1 手动更改配置文件
    • 3.2 使用IDEA自动继承
  • 四、聚合
    • 4.1 问题引入
    • 4.2 解决方案

前言

上一章的学习已经足够掌握对Maven的基本使用了
而本章节对Maven的深入了解即使不掌握也不影响Maven的使用
不过经过本章更细节的学习
在往后使用Maven出现的小问题 可以更快速的定位问题所在

一、Maven的核心概念

1.1 Maven-Jar包+模块化管理

Maven的两大主要功能就是:

  1. 管理Jar包
  2. 模块化管理项目

1.2 POM

本质就是面向对象/模块化的思想
Maven主要就两个点:
第一是对jar包的各种管理
第二是对项目的管理(把项目拆分成各个模块项目进行管理)
在这里插入图片描述

1.3 坐标及其命名规范

  • 数学中,在平面上xy能确定一个唯一的点;在空间上xyz能确定一个唯一的点
  • 类似的,在Maven中的坐标也是这个作用,确定该项目/模块的唯一路径

这里用install自己的模块到本地仓库为例:
在这里插入图片描述
在这里插入图片描述

  • 命名规范:
    groupId:公司或者组织的域名的倒序+当前项目/模块名称
    artifactId:当前项目/模块的名称
    version:当前项目/模块的版本号

1.4 仓库的概念

事实上 在实际工作中 本地仓库和中央仓库之间还存在一个私服
也就是公司为了方便统一管理 自己搞得私人服务器
由公司统一从中央仓库下载 员工在个人电脑上配置公司私服的地址
这样做主要就是为了公司能统一管理
在这里插入图片描述

1.5 生命周期

clean default site
在这里插入图片描述

1.6 插件和目标

刚刚说Maven生命周期 那么多的功能 实际上都是有插件完成的
而Maven的核心仅仅是定义了生命周期
在这里插入图片描述

目标可以理解成任务
任务和插件的关系是一对多
在这里插入图片描述

二、依赖管理

2.1 自己写的模块和模块之间也可以互相依赖

在这里插入图片描述

因为我之前已经对Test02进行过install操作
所以直接测试 是没什么问题的
在这里插入图片描述

看看我把Test02在本地仓库的Jar删除会发生什么
在这里插入图片描述

2.2 依赖的生效范围(scope标签)

  • compile默认就是这个范围)
    1.main目录下的Java代码可以访问这个范围的依赖
    2.test目录下的Java代码可以访问这个范围的依赖
    3.部署到Tomcat服务器上运行时 要放在WEB-INF的lib目录下(简单的理解成部署出去的肯定是给用户使用的 用的就是主程序的代码 所以肯定要放)

列如上面的Junit 我没有写任何scope标签 所以是默认的compile
那么我无论是在主程序里importJunit还是在测试程序里importJunit 都不会报错

  • test
    1.main目录下的Java代码不能访问这个范围的依赖
    2.test目录下的Java代码可以访问这个范围的依赖
    3.部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下(测试程序 我当然不需要部署 这对用户来说是无关紧要的)

  • provided(生效范围和compile一致)
    1.main目录下的Java代码可以访问这个范围的依赖
    2.test目录下的Java代码可以访问这个范围的依赖
    3.部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下

因为Tomcat也是用Java写的 他所依赖的Jar包肯定是自带的
而我的项目如果用到了相同的Jar包 直接用Tomcat的就行了
例如:servlet-api在服务器上运行时,Servlet容器会提供相关API,所以部署的时候不需要

2.3 依赖的传递性

在这里插入图片描述
在这里插入图片描述

2.4 依赖冲突问题

Maven自动会根据以下两点原则帮助我们处理依赖冲突问题

1.路径最短者优先
在这里插入图片描述

2.路径相同时先声明者优先
注:这里的声明指的是父模块对于依赖子模块的声明
如果在MakeFried里先声明对HelloF的依赖 那就传递2.14
反之传递2.17
在这里插入图片描述

2.5 依赖的排除

比如:
03依赖了02 02依赖了Junit4.5
根据依赖传递原则 Junit4.5会传递给03
但是03不想要4.5 想自己依赖一个4.9
如何解决?
在这里插入图片描述排除之后 我想依赖谁自己添加即可在这里插入图片描述

2.6 依赖版本统一管理

以Spring全家桶为例
当我引入一大堆依赖的时候 肯定希望版本是统一的
同时也不希望在不统一的情况下一个一个去改版本
这个时候就有了之前的约定>配置>编码的思想
那我能不能把版本号提取出来成一个配置 然后直接引用呢?
在这里插入图片描述

牵一发则动全身
在这里插入图片描述

三、继承

3.1 手动更改配置文件

注意:这里容易混淆
在2.6不是提到了统一管理吗
为什么这里又搞出来一个继承?
2.6的统一管理 是针对在同一个Maven项目里需要多个依赖
这里继承是针对多个Maven项目里来统一管理依赖

在这里插入图片描述

其中 父工程他其实没必要打成jar包
因为他的作用就是给子工程去继承使用
方便统一管理的
真正有用的 要打包成jar的 就是子工程

1.首先在父工程声明一下打包方式
在这里插入图片描述
2.然后在每一个子工程的pom文件里实现继承
在这里插入图片描述

3.最后为了统一管理子工程依赖版本号 需要在父工程的pom里设置
在这里插入图片描述
3.记住如果需要使用父类统一的版本 需要在子类直接把依赖的版本坐标删掉就行(否则就类似于子类重写了父类方法 肯定优先使用子类的方法)
在这里插入图片描述
4.上面那种方式父工程里并不会加载所写的依赖 仅仅是统一管理了版本
而这种方式 父类会加载junit 同时子类会直接继承并加载junit 都不需要写dependency
在这里插入图片描述

3.2 使用IDEA自动继承

在这里插入图片描述

四、聚合

4.1 问题引入

聚合的前提是有继承关系
HelloF依赖Hello
我想打包HelloF之前 必须先把Hello install到本地仓库才行
否则会报错
在这里插入图片描述

如果存在大量的依赖
每次都要我一个一个去找去install 岂不是非常低效率?

4.2 解决方案

聚合的配置很简单
在这里插入图片描述

这样一来 问题就解决了
而且MAVEN先后顺序都考虑到了
在这里插入图片描述
别说是package 直接install Parent都可以!!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity3d版白银城地图

将老外之前拼接的Unity3d版白银城地图,导入到国内某手游里,改成它的客户端地图模式,可以体验一把手游的快乐。 人物角色用的是它原版的手游默认的,城内显示效果很好,大家可以仔细看看。 由于前期在导入时遇到重大挫折&…

大数据基础设施搭建 - Doris

文章目录 一、Linux系统要求1.1 设置系统最大打开文件句柄数1.2 设置最大虚拟块的大小1.3 集群中其他安装doris的机器同上调整1.4 重启服务器生效 二、确认需要下载哪个Doris版本三、上传并解压压缩包3.1 创建目录3.2 解压fe3.3 解压be3.4 解压java udf函数3.4.1 解压3.4.2 复制…

Linux中的文件类型

一、Linux系统如何区分文件类型? Linux系统中不以文件后缀名来区分文件类型,而是通过文件属性中第一列来区分 (Linux系统不以文件后缀名区分文件类型,但是不代表Linux系统不使用文件后缀名,LInux系统中的许多工具例如…

有来团队后台项目-解析7

sass 安装 因为在使用vite 创建项目的时候,已经安装了sass,所以不需要安装。 如果要安装,那么就执行 npm i -D sass 创建文件 src 目录下创建文件 目录结构如图所示: reset.scss *, ::before, ::after {box-sizing: border-box;border-color: currentcolor;border-st…

国家网安教育技术产业融合发展试验区建设专家指导组莅临麒麟信安调研

3月12日下午,由教育部网络安全教学指导委员会秘书长(专家组组长)封化民、工业和信息化部规划司原司长肖华、中国现代国际关系研究院原副院长张力等领导组成的国家网安教育技术产业融合发展试验区建设专家指导组莅临麒麟信安及湖南欧拉生态创新…

手把手教你打造研究生个人简历模板|轻松驾驭简历设计

在简历设计中,如何展现自己的学历优势,是很多学生困扰的问题。 下面,我们首先从即时设计中分享一些不同风格的研究生简历模板。 风格多样的免费简历设计模板https://js.design/community?categorysearch&search%E7%AE%80%E5%8E%86&…

使用el-row及el-col页面缩放时出现空行解决方案

问题: 当缩放到90%或者110%,选中下拉后,下方就会出现空行 如下图所示: 关于el-row 和 el-col : 参数说明类型可选值默认值span栅格占据的列数number—24offset栅格左侧的间隔格数number—0push栅格向右移动格数number…

【Python/crawl】如何使用Python爬虫将一系列网页上的同类图片下载到本地

【需求】 从网页https://www.zhainq.com/%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f%e6%9c%ba%e6%9e%84/%e6%97%a5%e6%9c%ac%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f/109012.html 开始,有十七页,每页都有大漂亮“小濑田麻由”的若干图片,想要将其…

Maven的基本使用

Maven的基本使用 一、为什么要使用Maven1.1 方便添加第三方Jar包1.2 方便获取第三方Jar包(中央仓库)1.3 解决了依赖问题1.4 解决了依赖冲突1.4 项目管理更清晰1.5 总结 二、Maven的下载三、配置Maven本地仓库和中央仓库3.1 Settings文件3.2 配置本地仓库3.3 配置中央仓库(镜像地…

UE5数字孪生系列笔记(二)

智慧城市数字孪生系统 制作流云动画效果 首先添加一个图像在需要添加流云效果的位置 添加动画效果让其旋转 这个动画效果是程序开始就要进行的,所以要在EventConstruct中就可以启动这个动画效果 添加一个一样的图像在这里,效果是从此处进行放大消散 添…

海豚调度系列之:任务类型——SQL节点

海豚调度系列之:任务类型——SQL节点 一、SQL节点二、创建任务三、任务参数四、任务样例五、运行该任务成功之后在hive中查询结果六、使用前置sql和后置sql示例 一、SQL节点 SQL任务类型,用于连接数据库并执行相应SQL。 二、创建任务 点击项目管理-项…

异步发送CompletableFuture<Void> future = CompletableFuture.runAsync(()

基于runAsync系列方法实现无返回值的异步计算 CompletableFuture future CompletableFuture.runAsync(() -> { sendTextMessage(userInfo,dxContent);//发送 });

Electron程序如何在MacOS下获取相册访问权限

1.通过entitiment.plist,在electron-builder签名打包时,给app包打上签名。最后可以通过codesign命令进行验证。 TestPhotos.plist electron-builder配置文件中加上刚刚的plist文件。 通过codesign命令验证,若出现这个,则说明成…

rancher是什么

Rancher Labs是制作Rancher的公司。Rancher Labs成立于2014年,是一家专注于企业级容器管理软件的公司。它的产品设计旨在简化在分布式环境中部署和管理容器的过程,帮助企业轻松地采用容器技术和Kubernetes。Rancher Labs提供的Rancher平台支持Docker容器…

element-plus 完成下拉切换功能

项目场景: element-plus element-plus 完成下拉切换功能,选用了popover 组件去进行样式修改,本来大概是要实现下面这样的样式效果,没想到调整的时候,这个选择的高亮模块总是超出。 实现效果: 解决方案&am…

【数据结构】二叉树---AVL树的实现

目录 一. 什么是AVL树 二. AVL树的结点结构定义 三. AVL树的动态平衡法 1. 左单旋转 --- RL(RotateLeft) 型调整操作 2. 右单旋转 --- RR(RotateRight) 型调整操作 3. 先左后右双旋转 --- RLR (RotateLeftRight) 型调整操作 4. 先右后左双旋转 --- RRL (RotateRightL…

【SpringBoot篇】再战 登录注册操作

文章目录 ⭐model.dto.user层🎈UserRegisterRequest.java🎈UserLoginRequest.java ⭐model.dto.entity层🎈User.java ⭐service层🎈UserService.java🎈UserServiceimpl.java ⭐controller层⭐mapper层🎈Use…

Parade Series - WebRTC ( < 300 ms Low Latency ) T.B.D

Parade Series - FFMPEG (Stable X64) 延时测试秒表计时器 ini/config.ini [system] homeserver storestore\nvr.db versionV20240312001 verbosefalse [monitor] listrtsp00,rtsp01,rtsp02 timeout30000 [rtsp00] typelocal deviceSurface Camera Front schemartsp ip127…

Ubuntu下txt中文显示乱码问题常规解决方法

在正常使用ubuntu 文档时,突然发现txt文档出现,如下情况 无法正常观看,后来搜了一下发现是gedit 没有对应打开文件的编码格式,Ubuntu用的是utf-8,所以打开会有乱码!初始没有GBK和GB2312,把GBK和GB2312添加…

OpenMP 编程模型

OpenMP 内存模型 共享内存模型: OpenMP 专为多处理器/核心、共享内存机器设计,底层架构可以是共享内存UMA或NUM OpenMP 执行模型 基于线程的并行: OpenMP 程序基于多线程来实现并行, 线程是操作系统可以调度的最小执行单元。 …
最新文章