maven依赖jar包时版本冲突的解决

这篇具有很好参考价值的文章主要介绍了maven依赖jar包时版本冲突的解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、第一声明优先原则

在pom.xml配置文件中,如果有两个名称相同版本不同的依赖声明,那么先写的会生效。

所以,先声明自己要用的版本的jar包即可。
所以,添加新依赖时要放在最后边,以防止新依赖替换原有依赖造成版本冲突。

2、路径近者优先

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

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>

5、查看jar包的间接依赖

如果发现某个jar包,自己的pom中并没有定义,想看一下是被哪个jar包间接引用的,执行以下命令,直接输出到当前项目下,然后在idea中打开,搜索要找的jar包名字即可。这里的 “±” 和"-"并没有什么意义,只是为了让分级看起来更直观。

mvn dependency:tree>temp

maven依赖jar包时版本冲突的解决

如果想看冲突和重复的具体情况,用verbose参数

mvn dependency:tree -Dverbose -Dincludes=[commons-collections]

因此,我们可以看到Commons Collections 2.0被选为2.1,因为它离它更近,并且默认情况下,Maven使用最近赢得策略解决版本冲突。

6、排包

maven依赖jar包时版本冲突的解决

如图可知jai_core是在icepdf-core被间接引用的,如果jai_core的间接引入造成了依赖冲突,可在icepdf-core使用如下方式排出

org.icepdf.os icepdf-core 6.2.2
<exclusions>
    <exclusion>
        <groupId>javax.media</groupId>
        <artifactId>jai_core</artifactId>
    </exclusion>
</exclusions>

7、处理jar包依赖冲突总结

简介:处理jar包依赖冲突,首先,对于多个jar包都引用同一jar包的情况,最好是在程序中显式定义被共同引用的jar包的依赖,来统一版本号,方便维护

如果A和B都依赖同一jar包C,可能会出现两种情况

A和B引用的C版本相同,这时按照pom定义顺序选择第一个即可,没有冲突问题,如果在项目的maven中显示定义了C依赖,那么用选择项目定义的依赖,反正version都一样,没有影响

A和B依赖的C版本不同,选择版本高的那个,这时会出现两种结果

(1) 高版本兼容低版本,所以不会出现问题
(2)高版本不兼容低版本,假如A依赖C2版本,B依赖C3版本,C3不兼容C2,maven选择了高版本C3,对A来说会出现问题​

有3种解决方法[1] [2]如果B版本也可依赖C2,在项目的maven中显示定义对C2的依赖,这样所有都使用C2版本[3]如果B版本不支持C2版本,只能降低B版本,找到依赖C2的B版本从功能性和可维护性考虑,高版本提供的功能更多,bug更少,优先考虑1再考虑2最后考虑3文章来源地址https://www.toymoban.com/news/detail-435849.html

到了这里,关于maven依赖jar包时版本冲突的解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用maven打jar包时,如何只把依赖的其它jar中的类打进jar包,没有依赖的其它jar包的类文件不打进来?

    使用Maven打包时,默认情况下,所有依赖的jar包都会被打包到生成的jar文件中。 如果只想将依赖的其他jar中的类文件打进来,而不包含其它jar包,可以使用Maven的 maven-shade-plugin 插件进行配置。 以下是一个示例配置,将只打包依赖的其他jar中的类文件: 1. 在pom.xml文件中添加

    2024年02月15日
    浏览(29)
  • maven打jar包时,缺少本地jar包

    最近通过Docker + harbor + kuboard方式进行在开发环境进行部署,遇到了一个问题,本地idea中运行项目正常,但是kuboard一直报错重启。 通过查看kuboard日志发现是在运行容器启动项目时,缺少了一个本地数据库连接驱动。 然后检查项目中的pom文件,一开始感觉一切正常。pom配置如

    2024年02月11日
    浏览(28)
  • 如何定位、解决maven依赖冲突问题

    目录 1.依赖冲突的原因 2.复现一个依赖冲突场景 3.如何定位依赖冲突 3.1.maven show dependencies 3.2.maven helper 4.依赖路径最短优先原则 如果maven项目中,A依赖于B和C,B依赖于1.0版本的D,C依赖于2.0版本的D,这时候就会出现依赖冲突。   在A上加载使用D依赖的时候,maven会根据 依赖路

    2024年02月10日
    浏览(38)
  • 【Maven】如何发现,定位,解决依赖冲突

    运行的时候可能报出错误xx类找不到xx方法,xx类找不到,很有可能就是冲突导致的。 idea安装插件,maven helper 比如我有两个依赖,guava和findbug。 他们都用到了jsr305,但是我依赖的版本不同。可以进入pom文件点击下面的通过Dependency Anazlyer来查看冲突。 可以打印出依赖关系树

    2024年02月11日
    浏览(29)
  • Maven项目中的依赖出现版本冲突,最终发现是对Dependency Scope理解有误

    再来个文章目录 本文记录一下遇到maven依赖版本冲突后的排查过程说明以及问题原因说明 下面还有投票,帮忙投个票👍 最近加入了 Apache Dubbo 开源社区,成为了一名Dubbo Contributor。在熟悉Dubbo中的各个RPC协议时根据官网提供的示例搭建了一个示例。在熟悉过后想看下谷歌提供

    2023年04月09日
    浏览(46)
  • 【Maven】jar包冲突原因与最优解决方案

    【Maven】jar包冲突原因与 最优 解决方案 你是否经常遇到这样的报错: 以上报错就有可能是jar包冲突造成的,Maven中jar包冲突是开发过程中比较常见而又令人头疼的问题,我们需要知道 jar包冲突的原理,才能更好的去解决jar包冲突的问题。本文将从jar包冲突的原理和解决jar包

    2023年04月23日
    浏览(34)
  • 使用maven profile 实现一次打包多版本依赖的fat jar

    基于一种特殊情况: 需要开发通用代码,但底层依赖的jar有不同版本,使用一次maven 命令编译来同时生成多个fat jar。 测试代码结构: log4j-v1/log4j-v2 有一个同名类被maintest引用。 maintest pom.xml如下

    2024年02月12日
    浏览(36)
  • bcprov-jdk15to18和其他的bcprov版本jar包冲突(不同版本jar兼容)解决,与东方通bcprov-jdk15on.jar冲突解决

    项目需要新集成一个sdk进行服务调用,在本地使用 Tomcat 开发调试好好的,更新到服务器上发现不行了,服务都被起不来了。报错 SecurityException: JCE cannot authenticate the provider BC 。 更换和东方通一样的版本jar后,又报错 java.lang.SecurityException class \\\"org.bouncycastle.crypto.digests.General

    2024年02月04日
    浏览(28)
  • 【Maven】006-Maven 依赖传递和依赖冲突

    概念: Maven 依赖传递是指当一个项目依赖于另一个项目或库时,Maven 会 自动解析和获取 这些依赖,确保项目能够顺利构建和运行。 依赖传递包括 直接依赖和间接依赖 。直接依赖是项目 直接引用 的库,而间接依赖是 直接依赖所引用的其他库 。 作用: 简化项目管理 :Ma

    2024年02月02日
    浏览(35)
  • maven依赖管理(依赖配置、依赖传递、依赖冲突、依赖范围)

    这篇文章会介绍在maven中的依赖配置、依赖传递、依赖范围等知识点。 依赖配置很好理解,就是指当前项目需要什么jar,就在dependencies中进行配置 在maven管理jar的时候,冲突是肯定存在的,这里就来介绍一下在maven中对于jar的一些管理是如何进行的,遵循什么规则。 简单说就

    2024年02月11日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包