【Maven】006-Maven 依赖传递和依赖冲突

news/2024/7/24 7:38:01 标签: maven, java

【Maven】006-Maven 依赖传递和依赖冲突

文章目录

  • 【Maven】006-Maven 依赖传递和依赖冲突
  • 一、依赖传递
    • 1、概述
    • 2、案例:jackson 依赖
      • 引入依赖
      • Maven 仓库详情页
      • IDEA 中查看 Maven 依赖关系
  • 二、依赖冲突
    • 1、概述
    • 2、冲突解决的两种方式

一、依赖传递

1、概述

  1. 概念:
    • Maven 依赖传递是指当一个项目依赖于另一个项目或库时,Maven 会自动解析和获取这些依赖,确保项目能够顺利构建和运行。
    • 依赖传递包括直接依赖和间接依赖。直接依赖是项目直接引用的库,而间接依赖是直接依赖所引用的其他库
  2. 作用:
    • 简化项目管理:Maven 通过依赖传递简化了项目的管理,开发者只需声明直接依赖,Maven 会负责解析和获取所有的间接依赖。
    • 版本控制:Maven 可以管理不同库的版本冲突,确保项目使用的是正确的版本,避免冲突和不一致性。
  3. 传递的原则:
    • 传递性: Maven 会自动传递依赖,确保直接依赖所需的库的所有间接依赖也能够被正确解析和获取。
    • 最短路径优先: Maven 会选择最短路径来解析依赖,以确保使用最直接、最适合的版本。
    • 冲突解决: 当出现版本冲突时,Maven 会根据一定的规则进行解决,通常选择最高版本的库
  4. 依赖传递终止:
    • 依赖传递会一直进行,直到达到最底层的库,这个库没有其他依赖为止。终止依赖传递的库被称为叶子节点
    • 通常,Java 标准库是依赖传递的终止点,因为它们不再依赖其他库。

2、案例:jackson 依赖

引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zibo</groupId>
    <artifactId>mvn-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.16.1</version>
        </dependency>
    </dependencies>

</project>

Maven 仓库详情页

image-20240113140439960

IDEA 中查看 Maven 依赖关系

image-20240113140518017

二、依赖冲突

1、概述

出现原因:直接或间接引入了相同的 jar 包!

冲突解决:自动能够解决,可手动解决,但不推荐手动解决!

直接引用或者间接引用出现了相同的 jar 包! 这时呢,一个项目就会出现相同的重复 jar 包,这就算作冲突!依赖冲突避免出现重复依赖,并且终止依赖传递!

image_km7_szBRUw

Maven 自动解决依赖冲突问题能力,会按照自己的原则,进行重复依赖选择。同时也提供了手动解决的冲突的方式,不过不推荐!

2、冲突解决的两种方式

解决依赖冲突(如何选择重复依赖)方式:

  1. 自动选择原则

    • 短路优先原则(第一原则)

      A—>B—>C—>D—>E—>X(version 0.0.1)

      A—>F—>X(version 0.0.2)

      则 A 依赖于 X(version 0.0.2)。

    • 依赖路径长度相同情况下,则“先声明优先”(第二原则)

      A—>E—>X(version 0.0.1)

      A—>F—>X(version 0.0.2)

      在<depencies></depencies>中,先声明的,路径相同,会优先选择!

  2. 手动排除

    <dependency>
      <groupId>com.atguigu.maven</groupId>
      <artifactId>pro01-maven-java</artifactId>
      <version>1.0-SNAPSHOT</version>
      <scope>compile</scope>
      <!-- 使用excludes标签配置依赖的排除  -->
      <exclusions>
        <!-- 在exclude标签中配置一个具体的排除 -->
        <exclusion>
          <!-- 指定要排除的依赖的坐标(不需要写version) -->
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    

http://www.niftyadmin.cn/n/5323828.html

相关文章

Compileflow工作流引擎使用讲解

文章目录 1 Compileflow1.1 简介1.2 特点1.3 Compileflow插件下载1.4 main方法调用1.4.1 pom.xml1.4.2 新建bpm文件1.4.3 各个节点绑定方法1.4.4 测试方法 1.5 bpm各个标签说明1.5.1 BPM根节点1.5.2 全局变量1.5.3 开始节点: start1.5.4 结束节点: end1.5.5 自动节点: autoTask…

【操作系统】在阅读论文:OrcFS: Orchestrated file system for flash storage时需要补充的基础知

在阅读论文&#xff1a;OrcFS: Orchestrated file system for flash storage是需要补充的基础知识 这篇论文是为了解决软件层次之间的信息冗余问题 To minimize the disk traffic, the file system buffers the updates and then flushes them to the disk as a single unit, …

未来的失业将是常态吗?

2024年&#xff0c;科技巨头谷歌、亚马逊都在本周宣布大规模裁员&#xff0c;影响到众多部门。此外&#xff0c;社交平台 Discord 表示将裁员 17%&#xff0c;游戏服务商 Unity Software 宣布将裁员 25%&#xff0c;语言学习应用程序 Duolingo 则称解雇了 10% 的正式职工&#…

etcd跨主机通信与Flannel

跨主机通信 Docker 默认的网络环境下 , 单台主机上的 Docker 容器可以通过 docker0 网桥直接通信 , 而不同主机上的 Docker 容器之间只能通过在主机上做端口映射进行通信。 这种端口映射方式对很多集群应用来说极不方便。 如果能让 Docker 容器之间直接使用自己的 IP 地址进…

P1179 [NOIP2010 普及组] 数字统计————C++

目录 [NOIP2010 普及组] 数字统计题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code1Code2运行结果 [NOIP2010 普及组] 数字统计 题目描述 请统计某个给定范围 [ L , R ] [L, R] [L,R] 的所有整数中&#xff0c;数字…

Arduino| IDE下载、安装和设置以及开发板的连接

IDE下载、安装和设置以及开发板的连接 IDE下载IDE安装IDE设置首选项——设置语言、字体、主题、地址等等开发板管理器——添加开发板 开发板的连接 IDE下载 第一步&#xff1a;进入Arduino官网https://www.arduino.cc。 第二步&#xff1a;选择导航栏的Software&#xff0c;然…

WCF REST消息格式(JSON/XML)选择

可以说WebHttpBinding和WebHttpBehavior是整个Web HTTP编程模型最为核心的两个类型&#xff0c;前者主要解决消息编码问题&#xff0c;而余下的工作基本上落在了终结点行为WebHttpBehavior上。WebHttpBehavior属性HelpEnabled和AutomaticFormatSelectionEnabled是“帮助页面”与…