首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让maven解析局部依赖的传递依赖

Maven是一个Java项目的构建工具,它可以管理项目的依赖关系。当使用Maven构建项目时,它会自动解析和下载项目所需的依赖库,并将它们添加到项目的classpath中。

在Maven中,依赖关系分为两种类型:直接依赖和传递依赖。直接依赖是在项目的pom.xml文件中明确声明的依赖项,而传递依赖是由直接依赖所引入的其他依赖项。

有时候,我们可能只需要解析和使用直接依赖,而不希望Maven解析和引入传递依赖。为了实现这一点,可以使用Maven的<scope>元素来控制依赖的范围。

在pom.xml文件中,可以将依赖的<scope>设置为"provided",这样Maven在解析依赖时就不会将传递依赖包含进来。例如:

代码语言:txt
复制
<dependency>
    <groupId>com.example</groupId>
    <artifactId>example-library</artifactId>
    <version>1.0.0</version>
    <scope>provided</scope>
</dependency>

上述示例中,example-library是一个直接依赖,它的范围被设置为"provided"。这意味着Maven只会解析和引入example-library,而不会解析和引入example-library所依赖的其他库。

通过使用"provided"范围,我们可以有效地控制Maven解析局部依赖的传递依赖。这在某些情况下非常有用,例如当我们知道某些传递依赖已经由其他方式提供时,或者我们希望手动管理传递依赖的版本时。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云官网:https://cloud.tencent.com/
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ai
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iotexplorer
  • 移动应用开发平台(腾讯移动开发套件):https://cloud.tencent.com/product/mab
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯区块链服务(Tencent Blockchain):https://cloud.tencent.com/product/tbc
  • 腾讯元宇宙(Tencent Metaverse):https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

说说maven依赖冲突,依赖调解,依赖传递依赖范围

maven依赖冲突之前需要先说说maven 依赖传递依赖传递 当前项目引入了一个依赖,该依赖依赖也会被引入项目。...更加准确说法是,maven解析直接依赖POM,将那些必要间接依赖,以传递依赖形式引入到当前项目中。 为什么说是’必要间接依赖‘呢?这是因为不是所有的间接依赖都会被引入。...结论是:第一直接依赖范围和第二直接依赖范围决定了传递依赖范围。...如果依赖范围合适的话,B中依赖X也是会传递到A项目中。而两个X版本不一致,这就产生了依赖冲突。 在依赖冲突发生时,maven不会直接提示错误,而是用一套规则来进行 依赖调解。...那我们要如何检查呢?方法有两种。 第一种是使用mvn dependency:tree -Dverbose来列出项目的所有依赖以及传递依赖

1.2K30

Maven 依赖调解源码解析(三):传递依赖,路径最近者优先

场景 A有这样依赖关系:A->B->C->X(1.0)、A->D->X(2.0),X是A传递依赖,但是两条依赖路径上有两个版本X,那么哪个X会被Maven解析使用呢?...两个版本都被解析显然是不对,因为那会造成依赖重复,因此必须选择一个。根据路径最近者优先原则,该例中X(1.0)路径长度为3,而X(2.0)路径长度为2,因此X(2.0)会被解析使用。...往上翻,可以看到 previous 也即X(1.0)和 node 也即 X(2.0)均是在上一步解析得到: 而 resolved 是在这里解析得到: 结合前面的分析,我们就可以知道: 如果 resolved...,让我们看看: 其实很容易发现,依赖解析过程就是一种深度遍历,这里 recurse 方法会被不断递归。...小结 至此,我们已经知道了路径最近者优先原则运行原理:依赖解析是一种深度遍历过程,每当解析一个依赖后,均会将其放到 resolvedArtifacts 这个Map中,后续再看到同名依赖时,进行冲突调解

58030
  • Maven - 依赖范围和传递依赖

    由于此类依赖不是通过Maven仓库解析,而且往往与本机系统绑定,可能造成构建不可移植,因此应该谨慎使用,systemPath元素可以引用环境变量。...Maven传递依赖 什么是传递依赖 有时候我们在pom.xml文件中引入依赖,其本身就需要依赖于其他依赖,这时候我们不需要去考虑这些依赖Maven解析各个直接依赖pom,将那些必要间接依赖...,以传递依赖形式引入到当前项目中。...通过传递依赖,我们可以在pom.xml文件中少写不少依赖配置 传递依赖依赖范围 假如当前项目为A,A依赖于B,B依赖于C。...其依赖范围如下: 表格第一列是B在A中依赖范围,第一行是C在B中依赖范围,交叉格子是C在A中依赖范围;下表中-表示不传递依赖

    1.1K10

    Maven 依赖解析规则

    对于 Java 开发工程师来说,Maven依赖管理和代码构建标准。遵循「约定大于配置」理念。Maven 是 Java 开发工程师日常使用工具,本篇文章简要介绍一下 Maven 依赖解析。...依赖树结构 在 pom.xml dependencies 中声明依赖包后,Maven 将直接引入依赖,并通过解析直接依赖 pom.xml 将传递依赖导入到当前项目,最终形成一个树状依赖结构。...针对这种多个版本构建依赖时,Maven 采用「短路径优先」原则,即 A 会依赖 2.0 版本 E。如果想引入 1.0 版本 E,需要直接在 A pom 中声明 E 版本。...[2020-11-07-105552.png] 如果 Java 项目过于庞大,或者依赖传递过于复杂时,可以使用 dependencyManagement 定义默认版本号,一次定义全局生效,避免开发者自行管理依赖版本...依赖排除 我们可以使用 exclusion 来解决依赖冲突,但是 exclusion 会降低 Maven 依赖解析效率,因为对应 pom 文件不能缓存,每次都要重新遍历子树。

    3.1K40

    Maven依赖管理 - 引入依赖

    Maven依赖管理 - 引入依赖 依赖管理(引入依赖) 1.目标 能够掌握依赖引入配置方式 2.路径 导入依赖 导入依赖练习 依赖范围 3.讲解 3.1导入依赖 导入依赖坐标,无需手动导入jar包就可以引入...在pom.xml中使用标签引入依赖。 做项目/工作里面 都有整套依赖, 不需要背诵. 或者可以去Maven官网找, 复制,粘贴即可....例如:我们查找一下 junit 坐标依赖, 访问 https://mvnrepository.com/ image-20201213195704285 image-20201213195812875...--引入servlet依赖--> <!...image-20201213200903462 其中范围说明如下: compile 编译、测试、运行,A在编译时依赖B,并且在测试和运行时也依赖 例如:strus-core、spring-beans

    1.7K10

    Maven 依赖调解源码解析(四):传递依赖,第一声明者优先

    场景 路径最近者优先原则不能解决所有问题,比如这样依赖关系:A-> C->X(1.0)、A->D->X(2.0),X(1.0)和 X(2.0)依赖路径长度是一样,都为 2。...那么到底谁会被解析使用呢?...在 Maven 2.0.8 及之前版本中,这是不确定,但是从 Maven 2.0.9 开始,为了尽可能避免构建不确定性,Maven 定义了依赖调解第二原则:第一声明者优先。...在依赖路径长度相等前提下,在 POM 中依赖声明顺序决定了谁会被解析使用,顺序最靠前那个依赖优胜。该例中,C 依赖声明在 D 之前,那么 X(1.0)就会被解析使用。...这个「小于等于」就很有灵性,同时实现了传递依赖路径最近者优先和第一声明者优先这两个原则。

    55320

    Maven精选系列--依赖范围、传递、排除

    今天讲讲如何管理依赖,及依赖范围、传递性等特征。 添加依赖 下面我添加了一个spring-web依赖maven就会去下载spring-webjar包及它依赖一些jar包。...Maven2.0.9之后新增范围,只能用在中,并且导入type为pom类型父工程配置,一般用来解决多继承问题。...依赖传递 依赖传递前面讲过通过继承和聚合方式可以达到,通过继承方式可以轻松从父项目继承过来,通过聚合方式也可以间接传递过来。...继承:A继承B,A就可以继承Bdependencies依赖。 聚合:A依赖C,C依赖D,那么A就要依赖D自然也就获取了D依赖。 下面这是dubbo直接依赖和所有间接依赖关系列表。...依赖排除 在依赖传递过程中,如A依赖B、S2.0,B依赖C、S1.0,这样A就有了S1.0和S2.0两个依赖,这样某些情况下会造成冲突需要手动把B间接传递过来依赖排除掉,就是不依赖B带过来S1.0

    1.2K120

    Maven 依赖调解源码解析(一):开篇

    前言 相信久经沙场 Java 开发同学们,一定对 Maven 这个工具不陌生。Maven 依赖调解原则,便是经常聊到的话题。...它是为了解决 groupId 和 artifactId 完全相同依赖,应该取哪个版本号问题。 下面列举出一些原则: 原则一:传递依赖,路径最近者优先。...原则二:传递依赖,第一声明者优先。 原则三:同一个文件内声明,后者覆盖前者。又称作:同名覆盖。 原则四:dependencyManagement 版本锁定。...以上这些原则,你一定都知道,​但你清楚 Maven 源码是如何实现它们吗? 废话不多说,让我们准备进行实现,到 Maven 源码世界逛逛!...dependency:tree 是 Maven 核心依赖插件,它在依赖解析时发挥重要作用,平时我们也经常使用命令 mvn dependency:tree 输出目录树进行查看。

    55021

    Maven构建和依赖管理解析

    依赖管理在之前传统 WEB 项目中,所依赖 JAR 包都要复制到工程中,这就导致了工程比较大。...Maven 解决方案:在 Maven 工程中,是不直接把 JAR 包直接导入到工程中,其通过在 pom.xml 文件中添加所需 JAR 包坐标来解决问题。...clean:主要处理项目构建后清理工作site:主要处理项目的站点文档生成default 生命周期包含了右图这些阶段compile 命令:下载所有当前项目所需要插件,以及所有依赖项目,然后进行构建...package 命令:从 pom 文件中获取打包类型,然后将打出来 JAR 输出到对应目录install 命令:将打包完放在 target 目录下 JAR 包部署到本地仓库POMpom.xm元素解析...project 这个元素是Mavenpom.xml文件顶层元素。

    17300

    Maven 依赖调解源码解析(二):如何调试 Maven 源码和插件源码

    那么问题来了,我们对 Maven 源码并不熟悉,总不能一头扎进去看。那么,我们就用调试方式分析吧,简单且精准。 那么问题来了,mvn 源码和插件源码如何调试呢?...因此我们需要以调试方式启动 Maven 源码,以便流程继续走下去。 打开 apache-maven-3.6.3 项目,新建一个远程调试配置,端口选择 8000。如下图所示。...注 1:本文以 Maven 核心源码为例介绍了调试流程,其实 Maven 插件源码调试方法也是一模一样。...注 2:这种调试方法很灵活,我们可以随便选择不同业务项目,与 Maven 源码进行联调。当然也有很多调试 Maven 源码方法,但要设置一大堆东西。...搞清楚如何调试 Maven 和插件源码后,我们就可以开始正式分析了。

    93531

    Maven依赖管理

    依赖配置 2. 依赖传递 2.1 依赖传递冲突问题 2.2 可选依赖 2.3 排除依赖 3. 依赖范围 4. 依赖范围传递性 1....依赖配置 依赖指当前项目运行所需jar,一个项目可以设置多个依赖 <!...依赖传递 直接依赖:在当前项目中通过依赖配置建立依赖关系 间接依赖:项目的依赖如果依赖其他资源,当前项目间接依赖其他资源 2.1 依赖传递冲突问题 路径优先:当依赖中出现相同资源时,层级越深,优先级越低...,层级越浅,优先级越高 声明优先:当资源在相同层级被依赖时,配置顺序靠前覆盖配置顺序靠后 特殊优先:当同级配置了相同资源不同版本,后配置覆盖先配置(在一个pom中) 2.2 可选依赖 可选依赖指对外隐藏当前所以来资源...依赖范围传递性 带有依赖范围资源在进行传递时,作用范围将受到影响 到此,本章内容就介绍完啦

    79720

    MAVEN依赖优先原则

    Maven 依赖可以分为如下几部分: 直接依赖,就是本项目 dependencies 部分依赖 间接依赖,就是本项目 dependencies 部分依赖所包含依赖 依赖管理,就是本项目 dependency...:bom 就是工程项目中最外层主 POM ,也就是 dependencyManagement 那个 POM 一、 MAVEN 依赖三大原则 1.1 最短路径优先原则 Maven 依赖遵循最短路径优先原则...三、Maven 依赖加载流程 Maven 依赖加载流程如下 首先,将 parent 直接依赖,间接依赖,还有依赖管理,插入本项目,放入本项目的直接依赖,间接依赖还有依赖管理之前。...可用文中 1.1 做示例如下: 四、总结 本次主要讲解了 maven 依赖包含几大部分,以及 maven 依赖三大原则,并且对每种依赖原则都做了具体图解和示例,方便我们可以直接在项目中运行调试。...最后讲解了 maven 加载包进入项目中整个流程,并按照文中 1.1 所讲“最短路径优先原则“做为示例图解,进而加深对 maven 加载包流程理解。

    1.8K42

    Maven 依赖调解源码解析(六):dependencyManagement 版本锁定

    简单翻译一下,使用 dependencyManagement 声明依赖若指定了版本,可以: 指定传递依赖版本(即使传递依赖有自定义版本,也会被覆盖掉); 当直接依赖没有指定版本时,指定其版本...当然,如果使用 dependencyManagement 声明依赖没有指定版本,传递依赖自定义版本就会生效了。...我们场景,显然对应着第一种描述:dependencyManagement 可以指定传递依赖版本(即使传递依赖有自定义版本,也会被覆盖掉),其实就是版本锁定概念了。...最终我们找到了这里: 至此,我们找到了「解析 dependencyManagement 中定义依赖版本」源码。...小结 依赖解析过程中,会解析 dependencyManagement 定义依赖版本,如果解析到了,会以 dependencyManagement 重定义依赖版本为准,也就是我们常提到版本锁定。

    81230

    Maven依赖冲突解决方式

    Maven依赖冲突解决方式 [在这里插入图片描述] 对Maven概念还不了解可以看看我这篇文章: https://blog.csdn.net/pjh88/article/details/108520721...在讲依赖冲突之前我们先来讲讲什么是依赖传递maven依赖是可以传递,比如我们有A,B,C三个项目,其中A依赖B,B依赖C,由递推可知A依赖C [在这里插入图片描述] 举例 比如我们在web项目中导入...[在这里插入图片描述] 在我们开发中我们当然啦不允许这种情况出现,我们要使用什么版本,他就必须使用什么版本 [在这里插入图片描述] 解决方案 使用maven提供依赖调解原则 第一声明者优先原则...使用maven提供依赖调解原则 第一声明者优先原则 在 pom 文件中定义依赖,以先声明依赖为准。其实就是根据坐标导入顺序来确定最终使用哪个传递过来依赖。...spring-beans,因为自己直接在 pom 中定义 spring-beans要比其他依赖传递过来路径要近 排除依赖 可以使用exclusions标签将传递过来依赖排除出去 没有使用时候

    71100
    领券