Maven基础(3):解决依赖冲突

本文介绍了Java项目中依赖管理的概念,特别是传递依赖可能导致的冲突问题。当不同依赖引用同一jar包的不同版本时,会出现冲突。常见的冲突解决方法包括:声明优先原则、路径近者优先、排出原则和版本锁定。通过在pom.xml文件中指定版本或排除冲突依赖,可以有效解决此类问题。
摘要由CSDN通过智能技术生成

1、什么是传递依赖以及什么情况会产生冲突?

传递依赖:如果项目A需要引入依赖包B,依赖包B又引入依赖包C,那么B是A的直接依赖,C是A的传递依赖。如果项目A还需要引入依赖D,依赖D也引用了依赖C,当依赖包B引用的C和依赖包D引用的C版本不同时,则发生了依赖冲突。

一个项目里面同一个jar包一般不能有两个版本的 不然可能会出现jar包冲突的情况

常见报错有这三个:
1、java.lang.ClassNotFoundException(找不到类)
2、java.lang.NoSuchMethodError(找不到具体方法)
3、java.lang.NoSuchFieldError(字段错误)
4、java.lang.LinkageError(类错误 这个我没怎么见过)

共有四种解决方式:
1、第一声明优先原则:
在pom.xml配置文件中,如果有两个名称相同版本不同的依赖声明,那么先写的会生效。
所以,先声明自己要用的版本的jar包即可。在pom.xml文件中引入两个模块A和B的jar包坐标信息,先声明的是A模块,当A和B依赖包冲突时,项目只会引入A模块底下的冲突依赖包,B的冲突依赖包h
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>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值