精华内容
下载资源
问答
  • 然而,过多复杂的jar包依赖就可能造成版本冲突问题。比如:项目依赖A和B;A依赖C1.0,B依赖C2.0,如果C的两个版本不兼容,我们的项目就会出现问题。像例子中这样的C在还是很多的,最常见的就属apache的...

    Java的强大之处就是在于它的生态环境,有众多的轮子支持复杂项目的开发。现在基本上每个稍微有点规模的Java项目都会依赖到众多的jar包,而Maven应该是目前管理jar包依赖最流行的工具。然而,过多复杂的jar包依赖就可能造成版本冲突问题。比如:

    项目依赖A和B;A依赖C1.0,B依赖C2.0,如果C的两个版本不兼容,我们的项目就会出现问题。

    像例子中这样的C在还是很多的,最常见的就属apache的一堆工具包,比如commons-logging;

    冲突解决方法:

    1 分析冲突的jar包的依赖路径

    mvn dependency:tree -Dverbose -Dincludes=commons-logging:commons-loggging

    这条命令可以打印出所有依赖了groupId和artifactId都为commons-logging的jar包的依赖路径。

    2 选择一个所需的版本

    在两个冲突的版本中,我们在自己的项目中用到了哪个版本的语法,就选择哪个。

    3 在本项目的pom中将冲突的依赖排除:

    具体写法:

    比如我们要将一个依赖中的相应的jar包排除:

    Java

    com.xxx.xx

    xxx

    x

    com.springsource.slf4j.org.apache.commons.logging

    org.slf4j

    最后推荐一下intellij,在intellij中打开你的pom.xml,右键单击内容,选择diagram->show dependencies, 会自动执行mvn:dependency 并绘制一个依赖树,列出所有的依赖包如下图所示。想要排除哪个,可以直接右键选择"exclude".不过目前我还没发现怎样像命令行一样过滤树的结果,所有如果依赖太多,还是先执行一下命令找出哪里的依赖冲突了比较好。

    ![dependency.jpg](http://upload-images.jianshu.io/upload_images/1713176-1b64d1abc8bd6ebd.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    展开全文
  • 主要介绍了Mavenjar包冲突原理与解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • maven依赖jar包版本冲突解决方案

    千次阅读 2020-06-30 16:26:51
    jar包版本是以groupId+artifactId为坐标的,在groupId+artifactId相同的情况下version不同代码不同的版本,一般都是version的不同导致的jar冲突。 同一个产品除非是大版本的升级,否则groupId+artifactId一般不会变...

    jar包版本是以groupId+artifactId为坐标的,在groupId+artifactId相同的情况下version不同代码不同的版本,一般都是version的不同导致的jar冲突。
    同一个产品除非是大版本的升级,否则groupId+artifactId一般不会变。
    1、第一声明优先原则:
    在自己的pom文件中,如果有两个名称相同但版本不同的依赖声明,那么先写的会生效。—开发在自己定义的pom文件中,一般不会发生此种情况。

    2、路径优先原则:
    直接以来(自己在pom中添加的依赖)优于间接依赖;比如自己在pom文件中添加了A 1.0, B 2.0 两个jar包依赖,B又依赖了A2.0,那么最终生效的是A 1.0

    3、排除原则:
    在间接依赖冲突时,可以将不需要的jar的间接依赖排除,从而解决冲突。
    间接依赖的生效原则:先看层深,层级浅的生效;层深相同在看前后,谁先声明则生效。

    	<dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.3.24</version>
            <exclusions>
              <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
              </exclusion>
            </exclusions>
        </dependency>
    

    为了方便可以直接在IDEA中的可视化界面排除:点击pom文件,选择下边的Dependency Analyzer,可以搜索框输入jar名称,在需要排除的版本号上右键exclude即可。
    在这里插入图片描述

    4、版本锁定原则(推荐使用):
    如果微服务较多,为了三方件版本归一,会在父pom中指定具体的依赖三方件的版本号,在服务中依赖父pom即可。
    如果在间接依赖中的某些jar包在父pom中已经指定了对应的版本号,则在依赖树种此依赖的版本都会被刷成父pom中指定的版本;如果pom中没有指定此依赖,则此间接依赖的版本号还是其自身指定的版本号。

    	<properties>
            <spring.version>4.2.4.RELEASE</spring.version>
            <hibernate.version>5.0.7.Final</hibernate.version>
            <struts.version>2.3.24</struts.version>
        </properties>
        <!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                    <version>${spring.version}</version>
                </dependency>
    	</dependencies>
    </dependencyManagement>
    
    展开全文
  • maven依赖jar包版本冲突的解决

    千次阅读 2019-04-09 10:45:18
    共有四种解决方式: ★ 自动处理: 1、第一声明优先原则:(路径一样长) 在pom.xml配置文件中,如果有两个名称相同 ...所以,先声明自己要用的版本jar包即可。 例如: A中的 commons-io的版本为2.4 B中的commo...

    https://blog.csdn.net/sinat_39789638/article/details/78005945

    共有四种解决方式:

    自动处理:

    1、第一声明优先原则:(路径一样长)

    在pom.xml配置文件中,如果有两个名称相同 版本不同 的依赖声明,那么先写的会生效
    所以,先声明自己要用的版本的jar包即可。

    例如:

    A中的 commons-io的版本为2.4

    B中的commons-io的版本为2.0

    C到达A为 C->A

    C到达B为 C->B

    则看pom文件中,依赖的两个工程 谁在前面 就是 用哪个版本

    这里使用的common-io为2.4版本

     <dependency>
                <groupId>org.lonecloud.A</groupId>
                <artifactId>A</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <!--C依赖于B但是会将A的依赖传递进来 -->
            <dependency>
                <groupId>org.lonecloud.B</groupId>
                <artifactId>B</artifactId>
                <version>0.0.1-SNAPSHOT</version>
                <!-- 此标签的作用是可以将B的传递依赖关系A不传递给C -->
                <!-- <exclusions> <exclusion> <groupId>org.lonecloud.A</groupId> <artifactId>A</artifactId> 
                    </exclusion> </exclusions> -->
            </dependency>
    

    2、路径近者优先: 谁离得最近就使用谁的依赖jar包

    直接依赖 优先于 传递依赖如果 传递依赖的jar包 版本冲突了,那么可以自己声明一个 指定版本的 依赖jar即可解决冲突

    例如:

    C到达A为 C->B->A

    C到达B为 C->B

    A中的 commons-io的版本为2.4,B中的commons-io的版本为2.0,C中依赖于B,B依赖于A,则C的junit的包为2.0版本,因为依赖的短路优先

    手动处理:

    3、排出原则:

    传递依赖冲突时,可以 在不需要的jar 的传递依赖中 声明排除,从而解决冲突。
    例子:

    <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.3.24</version>
            <exclusions>
              <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
              </exclusion>
            </exclusions>
        </dependency>
    

    4、版本锁定原则(最常使用)

    在配置文件pom.xml中先声明 要使用哪个版本 的 相应jar包声明后 其他版本的jar包 一律不依赖。解决了依赖冲突。

    例子:

        <properties>
            <spring.version>4.2.4.RELEASE</spring.version>
            <hibernate.version>5.0.7.Final</hibernate.version>
            <struts.version>2.3.24</struts.version>
        </properties>
        <!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                    <version>${spring.version}</version>
                </dependency>
    </dependencies>
    </dependencyManagement>
    

    依赖范围有哪些?

    compile,provided,runtime,test,system,import。

    	   <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                <scope>test</scope>
            </dependency>
    

    看上面的xml片段,会发现一个新东西scope。这个标签的意思就是当前插件依赖的范围
    在开发中我们把第三方jar放入到classpath中,就能够调用第三方的类和方法。

    maven有3中classpath分别是

    1. 编译
    2. 测试
    3. 运行

    上面的xml片段中scope的值为test,也就是说这个构建只存在于测试环境中。所以scope的值就是控制与三种classpath的关系

    scope的值

    1. compile 默认的范围编译、测试、运行都有效。
    2. provided 编译和测试时有效,最后是在运行的时候不会被加入。官方举了一个例子。比如在JavaEE web项目中我们需要使用servlet的API,但是Tomcat中已经提供这个jar,我们在编译和测试的时候需要使用这个api,但是部署到tomcat的时候,如果还加入servlet构建就会产生冲突,这个时候就可以使用provided。
    3. runtime 在测试和运行时有效。
    4. test 在测试时有效。
    5. system 与本机系统相关联,可移植性差。编译和测试时有效。
    6. import 导入的范围,它只在使用dependencyManagement中,表示 从其他pom中 导入dependecy的配置

    举个import栗子:就是把A中的构建导入到B中。

    <project>
      <modelVersion>4.0.0</modelVersion>
      <groupId>maven</groupId>
      <artifactId>B</artifactId>
      <packaging>pom</packaging>
      <name>B</name>
      <version>1.0</version>
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>maven</groupId>
            <artifactId>A</artifactId>
            <version>1.0</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>
    </project>
    
    展开全文
  • pom文件: <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-core<...与idea右侧maven名称一 一对用: 引入sdk-feign0.1..

    pom文件:

    <dependency>
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-core</artifactId>
        <version>10.1.0</version>
    </dependency>

    与idea右侧maven名称一 一对用:

    引入sdk-feign0.1.1-SNAPSHOT:   会自动依赖feign-core:10.12,将其引入;

    业务中需剔除feign-core:10.12,使用10.1.0版本:

                            即sdk-feign0.1.1-SNAPSHOT + feign-core:10.1.0

    展开全文
  • Maven依赖jar包冲突常见的解决方法

    千次阅读 2020-12-23 04:55:47
    第一步判断jar是否加载,还是 加载的jar由于maven依赖管理存在传递依赖,造成依赖的jar版本号不对,相应的类找不到,或者是相应类版本不对,没有对应的方法。一 造成jar 冲突的原因:如果项目中存在对同一jar不同版本...
  • jar冲突原因: jar冲突主要是由于依赖传递导致的,不同的jar包依赖同一个不同版本的jar,导致冲突。可以看下下图。 B和C都依赖D,但是不同的版本,所以在使用的过程中可能会出现问题。 依赖调解原则...
  • 构建maven工程时pom.xml中引入依赖时有红色字体,setting处理了,也将jar包版本号都试了一遍,还是没解决,后来请教大牛,原来是没连网,maven工程加载了一部分jar包,连网之后自动下载的jar包跟之前的冲突,用这...
  • maven 依赖 jar 版本冲突的解决方案 通过 exclusion 标签排除掉不需要的 jar
  • maven排查jar包版本冲突

    千次阅读 2017-10-20 14:43:56
    场景描述有时候在pom中引入了新的jar包,由于maven会根据传递依赖,将该jar包依赖的其他jar包自动下载。因此,自动下载的jar包和已存在的jar包可能存在相同的jar包,但是版本不一致。此处就造成了冲突排查方法1、在...
  • maven依赖jar包冲突的解决思路

    万次阅读 2020-04-08 15:18:17
    目的是提供maven依赖jar包冲突的解决思路 需求场景: jackson-databind、fastjson 高危远程代码执行漏洞修复。Jackson-databind,版本号升级为2.10.3;fastjson,版本号升级为1.2.66 问题描述: 对需求...
  • Eclipse maven 解决jar包版本冲突

    万次阅读 2018-05-24 14:20:56
    jessezeng解决maven依赖传递中的版本冲突问题通常情况下,我们都比较喜欢使用maven进行项目管理,要加个依赖也非常简单,不需要到处去下载jar包,当然除了maven之外,也还有一些非常不错的工具。在使用maven进行...
  • Mavenjar包冲突原理与解决办法

    万次阅读 多人点赞 2018-07-20 19:57:34
    Mavenjar包冲突是开发过程中比较常见而又令人头疼的问题,我们需要知道 jar包冲突的原理,才能更好的去解决jar包冲突的问题。本文将从jar包冲突的原理和解决两个方面阐述Mavenjar包冲突的解决办法。
  • Maven 依赖jar包版本冲突解决方案
  • 主要介绍了maven 隐式依赖引起的包冲突解决办法的相关资料,需要的朋友可以参考下
  • 在spring reference中提到一个解决spring jar包之间版本冲突的解决方案,原文如下 It is possible to accidentally(意外地) mix different versions of Spring JARs when using Maven. For example, you may find ...
  • 在springboot+maven jar包版本冲突的解决方案 通过 exclusion 标签排除掉不需要的 jar 包。
  • 1.安装maven helper file -> setting -> plugins -> maven helper 下载插件并安装。 2.使用 1.随便选择一个pom.xml文件 这里有text和Analyzer两种。 2.选择 1.点击Analyzer,会发现有些冲突。 2.选中...
  • 由于导入了不同版本jar包造成的。就是说,当我发布了一版2.0jar的时候里面有个我新写的方法 adduser,但是1.0里面没有,pom没有及时更新jar,这样就会有NoSuchMethodError。我们怎么知道是否是jar包
  • 文章目录包版本冲突问题什么是依赖传递依赖冲突的解决1. 先声明优先原则2. 直接声明依赖优先原则3. 排除依赖4. 锁定依赖 教程思路: 包版本冲突问题 什么是依赖传递 先添加 springmvc的核心依赖的坐标 <...
  • maven处理多版本jar包依赖冲突

    千次阅读 2020-11-09 16:54:00
    mvn dependency:tree的用法 一.参考文档 https://maven.apache.org/plugins/maven-d...
  • IDEA解决mavenjar包冲突

    千次阅读 2018-09-06 09:47:29
     我相信,来到这里的你一定曾经被mavenjar包冲突困扰过。现在,阿福带着你使用IDEA彻底结局后顾之忧! 工具  众所周知,IDEA为我们提供了maven视图,让我们首先切换到这个视图!  看到如下的样子你已经...
  • 问题描述:项目中直接引用特定jar包版本,如1.6间接引用该jar包版本1.7。当编译构建时候,会报jar冲突。 解决方案:直接引用中直接写明版本号,间接...2、直接依赖优先于传递依赖,如果传递依赖jar包版本冲突...
  • 正确配置jstl的maven依赖jar包冲突的问题终于解决啦
  • Maven依赖版本Jar包冲突

    千次阅读 2019-01-21 11:10:29
    2.2 依赖版本冲突的解决 1、 第一声明优先原则,相当于父级优先 org.springframework spring-context 4.2.4.RELEASE &amp;amp;amp;lt;dependency&amp;amp;amp;gt; &amp;amp;amp;lt;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,538
精华内容 10,615
关键字:

maven依赖jar包版本冲突