maven从入门到精通 第四章 Maven中依赖的传递、排除、继承、聚合

news2024/11/15 23:23:24

这里写自定义目录标题

  • 一 maven中依赖的传递
    • 1 依赖的传递性
    • 2 使用complie范围依赖spring-core
    • 3 测试依赖是否被传递
    • 4 依赖传递性的意义
  • 二 maven中依赖的排除
    • 1 依赖排除概述
    • 2 具体操作依赖排除
  • 三 maven中依赖的继承
  • 四 maven中依赖的聚合

一 maven中依赖的传递

1 依赖的传递性

A依赖B,B依赖C,在A没有配置对C依赖的时候,A能不能直接使用C(C是否能传递到A)取决于B依赖C时的依赖范围
在这里插入图片描述
B依赖C时,是compile范围,可以传递
B依赖C时,使用test或者provided范围,不能传递,所以需要明确配置依赖

2 使用complie范围依赖spring-core

测试方式:让 pro01-maven-java 工程依赖 spring-core
具体实现步骤:编辑pro01-maven-java 工程根目录下 pom.xml
加入一个代码块

<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>4.0.0.RELEASE</version>
</dependency>
mvn dependency:tree 
ccess to local repository, switch to '${repositorySystemSession}' expression and get LRM from it instead.
[INFO] com.xyt.maven:pro01-maven-java:jar:1.0-SNAPSHOT
[INFO] +- junit:junit:jar:4.12:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] \- org.springframework:spring-core:jar:4.0.0.RELEASE:compile
[INFO]    \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

spring-core对commons-loging的依赖是compile范围的

mvn dependency:list

D:\maven_workspace\spaceVideo\pro01-maven-java>mvn dependency:list
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< com.xyt.maven:pro01-maven-java >-------------------
[INFO] Building pro01-maven-java 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- dependency:2.8:list (default-cli) @ pro01-maven-java ---
[WARNING] Parameter 'local' is deprecated core expression; Avoid use of ArtifactRepository type. If you need access to local repository, switch to '${repositorySystemSession}' expression and get LRM from it instead.
[INFO]
[INFO] The following files have been resolved:
[INFO]    org.springframework:spring-core:jar:4.0.0.RELEASE:compile
[INFO]    commons-logging:commons-logging:jar:1.1.1:compile
[INFO]    org.hamcrest:hamcrest-core:jar:1.3:test
[INFO]    junit:junit:jar:4.12:test
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

显示出来的都是当前工程,可以使用的依赖

3 测试依赖是否被传递

D:\maven_workspace\spaceVideo>cd pro02-maven-web

D:\maven_workspace\spaceVideo\pro02-maven-web>mvn dependency:tree
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< com.xyt.maven:pro02-maven-web >--------------------
[INFO] Building pro02-maven-web Maven Webapp 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ war ]---------------------------------
[INFO]
[INFO] --- dependency:2.8:tree (default-cli) @ pro02-maven-web ---
[WARNING] Parameter 'localRepository' is deprecated core expression; Avoid use of ArtifactRepository type. If you need access to local repository, switch to '${repositorySystemSession}' expression and get LRM from it instead.
[INFO] com.xyt.maven:pro02-maven-web:war:1.0-SNAPSHOT
[INFO] +- junit:junit:jar:4.11:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:provided
[INFO] \- com.xyt.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

由图中可知,web包中含有java包里面的依赖

jar包怎么跑到war包里了,归根结底是因为坐标的问题,指定工程依赖的坐标
看那个web工程目录下,有个jar包

<!-- 配置对Java工程pro01-maven-java的依赖 -->
<!-- 具体的配置方式:在dependency标签内使用坐标实现依赖 -->
<dependency>
<!--
通过指定被依赖工程的坐标完成依赖
-->
  <groupId>com.xyt.maven</groupId>
  <artifactId>pro01-maven-java</artifactId>
  <version>1.0-SNAPSHOT</version>
  <scope>compile</scope>
 
</dependency>

回去重新安装一下

D:\maven_workspace\spaceVideo\pro01-maven-java>mvn clean install
 

安装成功,回到2号工程查看相应信息

D:\maven_workspace\spaceVideo\pro02-maven-web>mvn dependency:tree
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< com.xyt.maven:pro02-maven-web >--------------------
[INFO] Building pro02-maven-web Maven Webapp 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ war ]---------------------------------
[INFO]
[INFO] --- dependency:2.8:tree (default-cli) @ pro02-maven-web ---
[WARNING] Parameter 'localRepository' is deprecated core expression; Avoid use of ArtifactRepository type. If you need access to local repository, switch to '${repositorySystemSession}' expression and get LRM from it instead.
[INFO] com.xyt.maven:pro02-maven-web:war:1.0-SNAPSHOT
[INFO] +- junit:junit:jar:4.11:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:provided
[INFO] \- com.xyt.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile
[INFO]    \- org.springframework:spring-core:jar:4.0.0.RELEASE:compile
[INFO]       \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

相当于是ABCD的依赖传递
但是junit范围是test就不能传递
servelet-api传递的provided范围依赖不能传

4 依赖传递性的意义

可以实现三拖106的jar包导入效果
springboot和springcloud本质就是一堆jar包

二 maven中依赖的排除

1 依赖排除概述

在这里插入图片描述

  • 如果说错误的定义了依赖的范围,导致从本地打的war包含有的依赖,与运行环境中的依赖产生了冲突,这是就需要排除依赖
  • A依赖B,B依赖C,假设这些依赖的范围都是compile,可以相互传递 ,但是A不想要C,那么就需要在A里面把C排除掉,好比让葫芦娃救爷爷,一般来说,葫芦娃只救自己的爹
  • 配置依赖排除的目的就是避免冲突

2 具体操作依赖排除

找到默认的安装仓库
在这里插入图片描述
配置groupid与artifactedId的值进去

运行这个语句:

D:\maven_workspace\spaceVideo\pro02-maven-web>mvn dependency:tree
[INFO] com.xyt.maven:pro02-maven-web:war:1.0-SNAPSHOT
[INFO] +- junit:junit:jar:4.11:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:provided
[INFO] \- com.xyt.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile
[INFO]    \- org.springframework:spring-core:jar:4.0.0.RELEASE:compile

和配置前的形成了一个对比
在这里插入图片描述
在这个dependency里面完成一些配置

<dependency>
<!--
通过指定被依赖工程的坐标完成依赖
-->
  <groupId>com.xyt.maven</groupId>
  <artifactId>pro01-maven-java</artifactId>
  <version>1.0-SNAPSHOT</version>
  <scope>compile</scope>
  <!--
  配置依赖的排除
  -->
  <!-- 使用excludes标签配置依赖的排除  -->
  <exclusions>
  <!-- 在exclude标签中配置一个具体的排除
   让commons-logging不要传递到当前工程
  -->
  <exclusion>
  <!--在maven的世界里,找jar包的唯一方式就是坐标-->
   <groupId>commons-logging</groupId>
   <artifactId>commons-logging</artifactId>
  </exclusion>
  </exclusions>
 
</dependency>

三 maven中依赖的继承

maven工程中,A工程继承了B工程,就是说A工程的POM继承了B工程的POM,被继承的B就叫做父工程,而另一个显然就叫做子工程

四 maven中依赖的聚合

聚合的目的就是整合资源,一个总工程,带着许多模块子工程,有了父工程,就不用分别启动子工程了,直接一键执行maven命令,体现了约定大于配置,配置大于编码的思想

  • 传统无聚合:一般来说,先启动父工程,后启动子工程;
    有依赖的工程,先安装被依赖的工程,比方说,一个java项目,被一个web项目依赖,我们需要设计各种逻辑图,严谨的

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

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

相关文章

thinkphp+vue+html超市零食品美食推荐系统零食购物商城网站7v281

本系统的开发使获取食品推荐系统信息能够更加方便快捷&#xff0c;同时也使食品推荐系统管理信息变的更加系统化、有序化。系统界面较友好&#xff0c;易于操作 运行环境:phpstudy/wamp/xammp等 开发语言&#xff1a;php 后端框架&#xff1a;Thinkphp5 前端框架&#xff1a;vu…

Linux入门2(常用命令)

Linux入门2 Linux常用命令快捷键基础命令文件查看命令文件编辑命令进程管理命令用户管理命令 Linux常用命令 快捷键 Ctrl Alt T打开终端 Ctrl shift 加号 终端字体放大 ctrl 减号 终端字体缩小 基础命令 sudo su 进入管理员目录 exit 返回到用户目录 ls 当前目录下的文…

数据导向下制造业的生产效率、交易效率提升办法

在智能制造和工业4.0成为趋势的今天&#xff0c;大部分制造业企业&#xff0c;均已在企业内部通过实施PLM系统&#xff08;Product Lifecycle Management&#xff0c;产品生命周期管理系统&#xff09;&#xff0c;实现了对组织内产品研发过程和产品研发数据的管理&#xff0c;…

联发科MT8768核心板 安卓4G核心板智能模块MTK方案主板开发板

MT8768核心板是一款性能优异的芯片板&#xff0c;具有以下特点&#xff1a; 处理器方面&#xff0c;MT8768核心板采用联发科MTK8768平台&#xff0c;搭载八核A53处理器&#xff0c;最高主频可达2.3GHz&#xff0c;为您提供出色的运行速度和高效率。 内存和存储方面&#xff0c;…

OAK相机如何将 YOLO NAS 模型转换成blob格式?

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…

数据库迁移同步 | 两地三中心到异地双活演变及关键技术探讨

两地三中心和异地多活都是分布式系统的关键技术&#xff0c;用于保证系统的高可用性和容错性。其中最关键的技术无疑是数据同步、同步防环和数据冲突解决。 异地容灾 & 两地三中心 两地三中心架构是一种分布式系统的架构模式&#xff0c;用于保证系统的高可用性和容错性。…

pom文件的project标签报错java.lang.OutOfMemoryError: GC overhead limit exceeded

1、pom文件的project标签报错java.lang.OutOfMemoryError: GC overhead limit exceeded&#xff0c;如何解决&#xff1f; 只需修改idea配置 调大内存&#xff0c;即可解决

git之gitk命令介绍

Gitk 是 Git 提供的一个 GUI 工具&#xff0c;可作为git图形化客户端使用。安装 Git 的时候会自动安装 Gitk 工具。打开git bash&#xff0c;输入 gitk 命令即可打开gitk工具。 Gitk 的主界面主要包含五个部分&#xff1a; 主菜单栏显示区提交信息显示区&#xff0c;显示提交…

【Nginx基础篇】Linux虚拟机安装nginx

目录 一、版本区别 二、编译安装 三、启动nginx 关于防火墙 四、安装成系统服务 一、版本区别 常用版本分为四大阵营 Nginx开源版 http://nginx.org/ Nginx plus 商业版 https://www.nginx.com openresty http://openresty.org/cn/ Tengine http://tengine.taobao.org/ …

BetaFlight统一硬件AOCODARC H7DUAL配置文件讨论

BetaFlight统一硬件AOCODARC H7DUAL配置文件讨论 1. 源由2. Review配置3. 分析整理3.1 生产商信息3.2 磁力计3.3 气压计3.4 陀螺仪3.5 串口RxTx3.6 板载Flash3.7 模拟OSD MAX74563.8 PPM接收机3.9 伺服器3.10 LED灯带3.11 蜂鸣器3.12 电机 X83.13 ADC(电压/电流/RSSI信号强度/空…

(六)Spring源码阅读:invokeBeanFactoryPostProcessors方法

一、概述 invokeBeanFactoryPostProcessors的执行顺序大致如下&#xff0c;先执行子类BeanDefinitionRegistryPostProcessor再执行父类BeanFactoryPostProcessor。而对于同一个类的执行顺序是先执行外部的集合再到子集&#xff0c;之后再到父集。更小维度执行的顺序按照order注…

私人图片云盘 - 本地快速搭建简单的EasyImage图床并实现公网访问

文章目录 1.前言2. EasyImage网站搭建2.1. EasyImage下载和安装2.2. EasyImage网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2 Cpolar内网穿透本地设置 4. 公网访问测试5. 结语 1.前言 一个好的图床&#xff0c;是网站或者文章图片能稳定显示的关键&…

学习网络安全如何避免成为脚本小子或者安全工具人

想要避免成为工具人或者脚本小子&#xff0c;你需要注意学习初期和工作初期的选择。 首先&#xff0c;在学习初期&#xff0c;打好基础最重要&#xff0c;避免成为脚本小子。 你可能发现很多人仅仅会写个Python然后会用工具&#xff0c;积累一点经验就可以找到一份还不错的工…

传奇人物《周兴和》书连载之67 不辱神圣的使命

不辱神圣的使命 这里&#xff0c;先前还是一个十分神秘的地方。 外人和车辆要想进入这片区域&#xff0c;那是绝对不允许的。这片区域隐于群山之中&#xff0c;且戒备森严&#xff0c;外人若想进入&#xff0c;那是要经过好几道政治审查和随身检查的。近年来&#xff0c;随着…

外卖项目优化-02-mysql主从复制、读写分离(shardingJdbc)、Nginx(反向代理,负载均衡)

文章目录 瑞吉外卖项目优化-Day02课程内容前言1. MySQL主从复制1.1 介绍1.2 搭建1.2.1 准备工作1.2.2 主库配置1.2.3 从库配置 1.3 测试 2. 读写分离案例 (shardingJdbc)2.1 背景介绍2.2 ShardingJDBC介绍2.3 数据库环境2.4 初始工程导入2.5 读写分离配置2.6 测试 3. 项目实现读…

GPT-4等大语言模型对教育的未来意味着什么?

‍ ‍ shadow Mixlab这些年举办了非常多的活动和workshop&#xff0c;都带有很强的教育属性。今天我抽空学习了可汗学院的《AI-for-Education》课程&#xff0c;非常有启发。我记录了精华内容&#xff0c;分享给大家。 课程地址&#xff1a; www.khanacademy.org/college-caree…

8086CPU汇编环境安装

之前是使用XP虚拟机中的DOS窗口&#xff0c;后来在B站上逛到的视频【《汇编语言》速成指南(全程敲代码)】中介绍了DOSBox这个软件&#xff0c;觉得很好用&#xff0c;使用方式记录在这里。 软件下载好是这样&#xff1a; 一、安装BOX程序 双击exe安装 &#xff0c;默认下一步…

看看好不好用,使用 Netty+SpringBoot 打造的 TCP 长连接通讯方案

项目背景 正文 一、项目架构 二、项目模块 三、业务流程 四、代码详解 五、测试 六、源码 后记 项目背景 最近公司某物联网项目需要使用socket长连接进行消息通讯。本猿为了解决这个问题&#xff0c;经过长时间的研究、调试和测试&#xff0c;最终找到了一个可行的方…

基于ASAM ODS标准的试验数字化平台-WDP

一 现状 随着现代测控技术的提高&#xff0c;数据结构变得越来越复杂多样&#xff0c;测量的数据量也在日益增大。此外&#xff0c;由于试验条件的限制&#xff0c;大多数企业的数据管理方式主要是通过各类电子文档将试验数据保存在每个工程师的移动电脑中&#xff0c;再进行汇…

【技术选型】Elasticsearch 和Solr那个香?

我们为什么在这里&#xff1f;我存在的目的是什么&#xff1f;我应该运动还是休息并节省能量&#xff1f;早起上班或晚起并整夜工作&#xff1f;我应该将炸薯条和番茄酱或蛋黄酱一起吃吗&#xff1f; 这些都是古老的问题&#xff0c;可能有也可能没有答案。其中一些是非常困难或…