Maven 日常冲突解决

1.如果发生冲突如何解决

   1.首先确保 jar 依赖没有缓存,可以先清除 idea的缓存

 

2.然后 重新compile 项目 可以使用如下命令:

 mvn clean compile -U

3.接着可以通过查看依赖树 如下命令:

mvn dependency:tree>tt.txt
 

可以在本地项目上查看 tt.txt 然后搜搜冲突的jar 包,然后根据冲突报错排除掉不需要的jar。

2.基础原则

解决方式
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>

3.如何通过冲突报错寻找具体的冲突jar是那个

 如提示 com.google.common.collect.Sets$SetView.iterator() 中无 iterator 方法,第一我们只能大概猜测是 google 相关的jar,想要知道具体是那个jar ,我们可以在ide

a中搜索 com.google.common.collect.Sets 这样你会看到有多个 jar中找到次类,然后具体点开查看是那个jar 中 没有对应的iterator 方法;然后排除掉没有 iterator的jar;或者通过 显示引入最新的版本包含iterator方法的jar版本进来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值