Maven深入了解

news2024/11/16 21:23:38

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.coloradmin.cn/o/1515582.html

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

相关文章

【刷题节】美团2024年春招第一场笔试【技术】

1.小美的平衡矩阵 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();int[][] nums new int[n][n], sum new int[n][n];char[] chars;for (int i 0; i < n; i) {…

Prompt Engineering(提示工程)

Prompt 工程简介 在近年来&#xff0c;大模型&#xff08;Large Model&#xff09;如GPT、BERT等在自然语言处理领域取得了巨大的成功。这些模型通过海量数据的训练&#xff0c;具备了强大的语言理解和生成能力。然而&#xff0c;要想充分发挥这些大模型的潜力&#xff0c;仅仅…

【Python】新手入门学习:详细介绍单一职责原则(SRP)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍单一职责原则&#xff08;SRP&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyT…

【深度学习】YOLOv9继续训练——断点训练方法

YOLOv9继续训练主要分为两个情况&#xff1a; 其一、训练过程中意外中断&#xff0c;未完成训练预期的epoch数量&#xff1b; 其二、训练完了&#xff0c;但是未收敛&#xff0c;在这个基础上&#xff0c;还想用这个权重、学习率等参数继续训练多一些轮次 一、训练过程中意外…

梦百合将在深圳展发布定制新品牌“榀至”

3月17日,下午2点,蓄势已久的梦百合定制品牌发布会将在深圳时尚家居设计周暨深圳国际家具设计展隆重召开!这将是梦百合旗下定制品牌——“榀至”的首度亮相! 发布会主题为“0压升级定制生活”,诠释着梦百合0压生活方式的拓展和延伸。 作为0压概念的提出者、0压绵专利的拥有者,十…

CMOS低噪声运算放大器D721-D722-D724对比分析

一 应用领域 D721、D722、D724是芯谷科技推出的三款低噪声、轨至轨运算放大器芯片&#xff0c;其中D721为单运放&#xff0c;D722为双运放&#xff0c;D724为四运放。适合用于音频领域、传感器等的信号放大处理&#xff0c;比如K歌宝、音响、测距、滤波器、AD转换器前级信号处…

OWASP TOP 10漏洞原理和应对策略

1. 注入 当将不受信任的数据作为命令或查询的一部分发送到解释器时&#xff0c;会发生注入缺陷&#xff0c;例如SQL&#xff0c;NoSQL&#xff0c;OS和LDAP注入。攻击者的敌对数据可能会诱使解释器执行未经预期的命令或未经适当授权而访问数据。 2. 失效的身份验证 与身份验…

通过日志恢复sql server数据库

在SQL Server中&#xff0c;通过日志恢复数据库是一个精细的过程&#xff0c;主要用于在数据库出现错误、数据丢失或需要回滚到特定时间点时恢复数据。以下是一般步骤概述&#xff1a; 设置恢复模式&#xff1a; 首先&#xff0c;数据库必须配置为“完整恢复模式”或“大容量…

基于深度学习的图像去雨去雾

基于深度学习的图像去雨去雾 文末附有源码下载地址 b站视频地址&#xff1a; https://www.bilibili.com/video/BV1Jr421p7cT/ 基于深度学习的图像去雨去雾&#xff0c;使用的网络为unet&#xff0c; 网络代码&#xff1a; import torch import torch.nn as nn from torchsumm…

人工智能迷惑行为大赏——需求与科技的较量

目录 前言 一、 机器行为学 二、人工智能迷惑行为的现象 三、产生迷惑行为的技术原因 四、社会影响分析 五、解决措施 总结 前言 随着ChatGPT热度的攀升&#xff0c;越来越多的公司也相继推出了自己的AI大模型&#xff0c;如文心一言、通义千问等。各大应用也开始内置…

Netty架构详解

文章目录 概述整体结构Netty的核心组件逻辑架构BootStrap & ServerBootStrapChannelPipelineFuture、回调和 ChannelHandler选择器、事件和 EventLoopChannelHandler的各种ChannelInitializer类图 Protocol Support 协议支持层Transport Service 传输服务层Core 核心层模块…

多维时序 | Matlab实现VMD-CNN-GRU变分模态分解结合卷积神经网络门控循环单元多变量时间序列预测

多维时序 | Matlab实现VMD-CNN-GRU变分模态分解结合卷积神经网络门控循环单元多变量时间序列预测 目录 多维时序 | Matlab实现VMD-CNN-GRU变分模态分解结合卷积神经网络门控循环单元多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现VMD-CN…

软件测试面试都问了什么?中级软件测试岗面试(4面)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 一面&#xff08;…

Excel判断CD两列在EF两列的列表中是否存在

需求 需要将CD两列的ID和NAME组合起来&#xff0c;查询EF两列的ID和NAME组合起来的列表中是否存在&#xff1f; 比如&#xff0c;判断第二行的“123456ABC”在EF的第二行到第四行中是否存在&#xff0c;若存在则显示Y&#xff0c;不存在则显示N 实现的计算公式 IF(ISNUMBER…

全视智慧机构养老解决方案,以科技守护长者安全

2024年2月28日凌晨1时许&#xff0c;在上海浦东大道的一家养护院四楼杂物间内发生了一起火灾事故。尽管火势不大&#xff0c;过火面积仅为2平方米&#xff0c;但这场小火却造成了1人死亡和3人受伤的悲剧。这一事件再次提醒我们&#xff0c;养老院作为老年人聚集的场所&#xff…

阿里云免费证书改为3个月,应对方法很简单

情商高点的说法是 Google 积极推进90天免费证书&#xff0c;各服务商积极响应。 情商低点的话&#xff0c;就是钱的问题。 现在基本各大服务商都在2024年停止签发1年期的免费SSL证书产品&#xff0c;有效期都缩短至3个月。 目前腾讯云倒还是一年期。 如果是一年期的话&#x…

关于微服务跨数据库联合查询的一些解决思路

微服务架构的一个非常明显的特征就是一个服务所拥有的数据只能通过这个服务的API来访问。通过这种方式来解耦&#xff0c;这样就会带来查询问题。以前通过join就可以满足要求&#xff0c;现在如果需要跨多个服务集成查询就会非常麻烦。 解决思路 下面提供几个思路仅供参考 表…

在centOS服务器安装docker,并使用docker配置nacos

遇到安装慢的情况可以优先选择阿里镜像 安装docker 更新yum版本 yum update安装所需软件包 yum install -y yum-utils device-mapper-persistent-data lvm2添加Docker仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.rep…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的火焰与烟雾检测系统详解(深度学习模型+UI界面升级版+训练数据集)

摘要&#xff1a;本研究详细介绍了一种集成了最新YOLOv8算法的火焰与烟雾检测系统&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等早期算法进行性能评估对比。该系统能够在包括图像、视频文件、实时视频流及批量文件中准确识别火焰与烟雾。文章深入探讨了YOLOv8算法的原理&#xff0…

二、TensorFlow结构分析(5)案例

案例&#xff1a; minimize(error) 代码&#xff1a; def linear_regression():# 自实现线性回归# 1&#xff09;准备数据X tf.random.normal(shape[100,1])y_true tf.matmul(X,[[0.8]]) 0.7# 2&#xff09;构造模型# 定义模型参数 用 变量weights tf.Variable(initial_v…