Maven依赖的可传递性

2023-11-17

  今天我们来讲一讲Maven工程在引用jar包上的传递性。

  1.情景分析

  假设有两个Maven工程,A和B,其中A引用了已经安装在仓库中的B工程install成的jar包,而B工程本身有对spring-core.jar的引用。我们可以看到在A工程的Maven Dependencise中,也会有对spring-core.jar的引用。这就是引用依赖的传递性。

  2.依赖传递的好处

  依赖的好处是可传递的依赖不必在每一个模块中都加以引用,最底层引用一次就可以,实际项目工程中,会有一个专门的过程来负责对项目中大多数工程都用到的jar包的管理。

  3.依赖传递的范围

  还有一点需要注意的是,我们讲的依赖的可传递性,仅仅针对compile范围的jar包的引用,是可以在Maven Project之间传递的,而对test、provided范围的依赖是不可以在Maven Project之间传递的。所以,test/provided范围的依赖就需要单独的在每一个需要用到的Maven Project中单独添加,如junit.jar和servlet-api.jar。

  4.依赖传递的排除

  ① 情景分析

  有时我们对某个jar包进行依赖时,会将被依赖jar包的依赖也间接的依赖了,如依赖spring-core.jar,会将commons-loging.jar也给依赖进来,处于某种安全性和稳定性的考虑,我们不希望将这个附带的commons-logging.jar也给引用到当前的Maven Project中,那么我们就需要在pom.xml中间接引入这个commons-logging.jar的地方使用<exclusions><exclusion><groupId><artifactId></artifactId></groupId></exclusion></exclusions>将其剔除。需要注意的是,若是在下层剔除,则上层自动的也不会对下层剔除的内容进行引用,若是在上层剔除,下层依然会引用。

  5.依赖传递的原则

  这个原则的作用是解决多个Maven Project之间的jar包冲突的问题。

  当一个上层的Maven Project有多个下层的Maven Project时,若下层的Maven Project有对一个相同的jar包引用只是版本不同,那么这个上层的Maven Project间接引用哪一个版本的jar包呢?Maven内置采用就近原则,就近的意思是,当前这个Maven Project到需要被引用的jar包之间经历了几层的引用关系,层数越少说明离得越近,则采用层数少的jar进行引用;当相同层数时,那么Maven采用在当前Maven Project当中配置的dependency的顺序进行引用。但是需要注意的是,如果当前Maven对这个相同的jar进行了直接的引用,那么就不会去寻找间接的引用的jar了

  6.统一管理jar的版本号

  当一个Maven Project有对一个技术的一系列jar包有引用时,如对spring-*.jar的引用,为了开发中尽量不出问题,我们需要采用jar包相同的版本号。

  我们只需要在pom.xml文件中配置一个properties标签结合我们自定义的标签,然后在dependency标签下的version标签中使用${}对上面的自定义标签进行应用就可以了。

举例:

假如当前项目为A,A依赖于B,B依赖于C。此时称A对于B是第一直接依赖,B对于C是第二直接依赖,而A对于C是传递性依赖。只要知道B在A项目中的scope,就可以知道C在A中的scope。其依赖范围如下:

当C在B中的scope为test时,A不依赖C,C直接被丢弃
当C在B中的scope为provided时,只有当B在A中的scope也是provided时,A才会依赖C,这时候C在A的scope是provided
当C在B中的scope为compile或runtime时,A依赖C,此时C在A中的scope继承自B在A的scope。注意,如果C的scope是runtime,B的scope是compile,此时C在A的scope是runtime,而不是compile

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven依赖的可传递性 的相关文章

  • java常见面试题及答案 11-20(JVM)

    11 JVM内存分哪几个区 每个区的作用是什么 java虚拟机主要分为以下一个区 方法区 1 有时候也成为永久代 在该区内很少发生垃圾回收 但是并不代表不发生GC 在这里进行的GC主要是对方法区里的常量池和对类型的卸载 2 方法区主要用来存
  • 安全测试初体验-XSS

    XSS XSS攻击成功后 攻击者能够对用户当前浏览器的页面植入恶意脚本 通过恶意脚本 控制用户的浏览器 这些用以完成各种具体功能的恶意脚本 被称为 XSS Payload XSS Payload实际上就是JavaScript脚本 所以任何J
  • JS逆向之某头条jsvmp逻辑层算法分析

    今天我们来研究下 某头条的jsvmp逻辑层加密算法 其主要的目的是想在大家在接触此类算法时 给出点实质性的建议和思路 0x01 分析加密 进入到目标网站通过分析请求会发现一个动态的 signature 加密参数 0x02 定位加密 不同于以
  • 在matlab中编译C++和opencv

    1 在matlab中运行 mex setup命令 选择C 类型 2 运行mex build 此时matlab配置基本完成 3在VS中添加matlab中的库目录和头文件目录 附加库目录 matlab安装目录下面的 extern lib win
  • 【Docker】 使用Docker-Compose 搭建基于 WordPress 的博客网站

    引 本文将使用流行的博客搭建工具 WordPress 搭建一个私人博客站点 部署过程中使用到了 Docker MySQL 站点搭建完成后经行了发布文章的体验 WordPress WordPress 是一个广泛使用的开源内容管理系统 CMS
  • 报告老师!AICA 学员交作业了!

    关注 飞桨PaddlePaddle 公众号 获取更多技术内容
  • linux-ssh安全策略(sshd)

    实际使用中 为限制ssh高危端口我们一般做以下策略 1 修改端口 ssh默认用22 2 密码强口令 3 root限制 4 新增ssh登录白名单 5 开启端口防火墙 6 有条件的话整个密钥登录更安全 不过avatar目前不支持密钥登录 所以项
  • 最安全的加密算法

    在密码学里 有一种理想的加密方案 叫做一次一密乱码本 one time pad one time pad的算法有以下要求 1 密钥必须随机产生2 密钥不能重复使用3 密钥和密文的长度是一样的 one time pad是最安全的加密算法 双方
  • “汉堡+奶昔”怎么就成了精致生活的热门标签?

    图片来源 视觉中国 文章来源 DT财经 左手汉堡 右手奶昔 这是新天地Coco的时髦新日常 最近沪上刮起一阵打卡新风潮 汉堡竟然成了标记城市美好生活的一大利器 还在纠结晚餐去金拱门还是汉堡王的DT君 发现自己在吃汉堡这件事上竟然也要被划出潮
  • 一步一步教你怎样给Apache Spark贡献代码

    本文将教大家怎样用10个步骤完成给Apache Spark贡献代码这个任务 到 Apache Spark 的github 页面内点击 fork 按钮 你的github帐户中会出现 spark 这个项目 本地电脑上 使用 git clone
  • 用python开发了一个绘制股票k线图的工具,还可以预测股票涨跌!【文末附源码和教学视频】

    文章目录 聊一聊这个工具 效果展示 股票数据 运行项目 前端界面 后端接口 源码地址 聊一聊这个工具 起初 我并不在意echarts 这不过是一个偶然 一次选择 一条简单的代码 一个图表的诞生 直到我完成了K线图的绘制 股票 一个神奇的发明
  • JS的内存泄露及处理方式

    概念 应用程序不再需要占用内存的时候 由于某些原因 内存没有被操作系统或可用内存池回收 就叫做内存泄漏 memory leak 内存的生命周期 内存分配 当我们声明变量 函数 对象的时候 系统会自动为他们分配内存 内存使用 即读写内存 也就
  • 利用CSS调整图片大小

    通常 我们可以给图片 img 设置一个CSS属性 定义其高度和宽度 但有时候 我们只希望控制图片的最大可见大小 这样的操作 一般有两种办法 1 直接使用CSS属性值 2 使用JavaScript动态设置CSS值 一 固定大小 一般 为了限制
  • 新手傻瓜式推荐教程:anaconda+Tensorflow+keras的安装详细教程

    目录 一 Anaconda的安装 二 Anaconda下配置Tensorflow 三 keras下载 四 出现报错 You are using pip version 9 0 1 however version 21 1 3 is avai
  • Java-用for循环嵌套输出1~100的质数(素数)

    package kjul public class jgtd public static void main String args int i j for i 2 i lt 100 i boolean flag true for j 2
  • pg数据库(七)之备份还原

    一 备份数据库 1 切换到postgres用户 切换到postgres用户即可 不用psql sudo su postgres 2 备份数据库 pg dump host 数据库IP port 端口 user 用户名 password 密码
  • MySQL——规范数据库设计

    文章目录 1 为什么需要设计数据库 2 三大范式 2 1 第一范式 1NF 2 2 第二范式 2NF 2 3 第三范式 3NF 3 规范性和性能的问题 1 为什么需要设计数据库 当数据库比较复杂的时候 我们就需要设计 糟糕的数据库设计 数据
  • postgresql定位未使用的索引(unused index)

    unused index会导致不必要的io开销 如写操作 insert update 期间 必须维护所有index 1 鉴于pg stat reset 函数能够reset统计信息到0 查找unused index时 先参考pg stat d
  • echarts地图的tooltip自定义样式显示图表

    echarts地图的tooltip自定义样式显示图表 最近遇到一个需求 需要在地图中实现鼠标点击或者停留在地图中某一片区域时 该区域显示亮高和显示tooltip提示框信息 但是难点在于需要在tooltip提示框中再绘制一层图表 按以往我们做
  • elasticsearch的版本和支持的jdk版本情况

    elasticsearch的版本和支持的jdk版本情况 参加官网 https www elastic co cn support matrix matrix jvm

随机推荐

  • 快速选择算法

    快速选择算法 我们可以将快速排序算法稍作修改将其应用在选择问题上 该算法称为快速选择算法 复杂度O NlogN 最坏情况为O N 2 令 A 为A中的元素个数 查找A中第k个最小元 算法步骤如下 1 如果 A 1 那么k 1 则将A中的元素
  • H5 及 web 页面微信授权登录流程

    一 事先准备工作 配置参数测试公众平台信息 测试号相关配置示例 1 打开公众平台的测试账号 2 配置js接口安全域名 3 扫码关注测试公众号 4 修改网页授权地址 配置授权回调的域名 至于什么是OAuth2 0 大家自行百度吧 这里的域名也
  • 传奇数据库字段说明

    MagicDb 是你所修炼的法术和各种技能 1 magsid 物品代号 2 magname 物品名称 3 effect type 效果属性 4 effect 效果 放此魔法所产生的动画效果 5 spell 每次耗用魔法值 6 defspel
  • 无版权,全免费,请收藏这10个免费高清无权素材网站

    无版权 全免费 请收藏这10个免费高清无权素材网站 2020 12 9 适用人群 网页设计师 平面设计人员 视频制作 动画设计人员 PS初学者 产品运营人员配图 公众号运营人员配图 对于设计师来说 图片 视频素材的好坏决定了设计效果的满意度
  • C/C++犯二程度计算

    文章目录 步骤一 步骤二 步骤三 下面为此题解析 为了详细 篇幅可能有点长 如果不想看解析 可翻到步骤三查看源程序 此题可以清晰看出 这是一道对数组操作的题目 因为整型数据的范围为 32 768 32767可以看出该题目要求是位数不大于10
  • Android异常 SecurityException: Permission Denial: starting Intent

    异常信息如下 SecurityException Permission Denial starting Intent act android intent action MAIN cat android intent category LA
  • 【报错】解决读取json时,出现 NameError: name ‘false‘ is not defined

    以文本格式 读取json文件时 出现如下类型错误 NameError name false is not defined NameError name null is not defined 原因是因为直接以为本流读取json 导致 fal
  • ETL数据库数据采集&订单数据采集

    问题解决 增加目标数据库配置信息 结果写出MySQL的数据库相关配置 target host localhost target port 3306 target user root target password mysql target
  • c# .net mvc的IHttpHandler奇妙之旅--图片文件请求安全过滤,图片防盗链

    源码下载 c net mvc图片文件请求安全过滤 图片防盗链 https download csdn net download cplvfx 88206428 在阅读该文章前 请先阅读该文章 c net mvc的IHttpHandler奇妙
  • Threejs进阶之五:使用CSS2DRenderer给模型添加HTML标签

    这一节给场景中的模型添加标签 想实现的效果是 通过鼠标点击场景中摩托车的某个部位 则在场景中出现一个标签 并在标签上显示该部位的信息 最终的效果图如下 要实现上面的效果 需要用到CSS 2D渲染器 先来了解下CSS 2D渲染器 CSS2DR
  • openwrt The process did not produce any response

    先记录问题 解决了再来说明 搜索了一圈没有人说到这个问题 我个人经历是 luc选择的语言是简体中文 换成英语就没错了 还在摸索
  • 通过5折交叉验证,实现逻辑回归,决策树,SVM,随机森林,GBDT,Xgboost,lightGBM的评分

    通过 折交叉验证 实现逻辑回归 决策树 SVM 随机森林 GBDT Xgboost lightGBM的评分 导入的包 import pandas as pd import warnings from sklearn preprocessin
  • EasyPoi与EasyExcl操作Excl

    EasyPoi与EasyExcel操作Excel 一 Poi介绍 Poi是操作Excel的一套规范 EasyPoi是Apache公司开发的一套框架 而EasyExcl是阿里开发的一套框架 EasyPoi是将表格一次行全部读到内存中再进行操作
  • ElementUI中遇到的问题

    1 解决在MAC系统中ElementUI中的el table标签中的滚动条太小的问题 解决方案 在CSS样式中输入如下样式 deep el table body wrapper webkit scrollbar width 17px 滚动条
  • 微服务实战(二十) 微服务RPC feign如何进行实体对象传递与接收

    关于微服务RPC远程调用 之前已经简单介绍过feign以及openfeign 并且就参数传递与接收也进行过简单讲解 Nacos Feign简单使用 https blog csdn net u011177064 article details
  • onchange事件,IE下的替换的两种方法

    例如
  • 【满分】【华为OD机试真题2023 JS】查找充电设备组合

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 查找充电设备组合 时间限制 5s 空间限制 256MB 限定语言 不限 题目描述 某个充电站 可提供n个充电设备 每个充电设备均有对应的输出功率 任意个充电设备组合的输出功率总和
  • 88.合并两个有序数组

    合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2 另有两个整数 m 和 n 分别表示 nums1 和 nums2 中的元素数目 请你 合并 nums2 到 nums1 中 使合并后的数组同样按 非递减顺序
  • 第十三届蓝桥杯大赛软件赛省赛_C/C++大学B组_试题C:刷题统计

    第十三届蓝桥杯大赛软件赛省赛 C C 大学B组 试题C 刷题统计 文章目录 赛题描述 思路 算法实现 赛题描述 思路 2022年04月14日18时42分28秒 初步想到的方法有两种 1 模拟 这个方法在a b极限小n极限大的情况下 一定会超
  • Maven依赖的可传递性

    今天我们来讲一讲Maven工程在引用jar包上的传递性 1 情景分析 假设有两个Maven工程 A和B 其中A引用了已经安装在仓库中的B工程install成的jar包 而B工程本身有对spring core jar的引用 我们可以看到在A工