idea 中解决maven 包冲突的问题(maven helper) 冲突问题 解决问题 锁定jar版本

转载自:https://blog.csdn.net/fnwibwj/article/details/81709733

比如项目中引用了两个 fastjson.jar的版本,分别为

fastjson:1.2.28
fastjson:1.2.3

我们用到了1.2.28中的某个类, 比如 A类,在版本更新中 1.2.3版本去掉了这个类,然而我们项目中maven 却把1.2.3的 jar 打包进去了,那我们就会报异常,不存在这个 class,但是我们调错误的时候却发现这个类存在,那我们怎么找到问题根源呢,到底是哪个包的需要Exclude 呢?

idea 中查看 maven 依赖只会给你一个复杂到极点图,基本没有啥价值,所以要安装个插件 maven helper

解决问题

(1)首先安装插件 maven helper(因为我已经安装了,所以没 install 的按钮了)
idea 中解决maven 包冲突的问题(maven helper)
冲突问题
解决问题
锁定jar版本

(2)安装完成后,在 pom 文件下方会出现这个东西
idea 中解决maven 包冲突的问题(maven helper)
冲突问题
解决问题
锁定jar版本

(3)点进去你会发现仿佛回到了 eclipse
idea 中解决maven 包冲突的问题(maven helper)
冲突问题
解决问题
锁定jar版本

(4)接下来到重点了,选中冲突选项 conflicts,这一列都是存在冲突的包
idea 中解决maven 包冲突的问题(maven helper)
冲突问题
解决问题
锁定jar版本

(5)以fastjson 为例
idea 中解决maven 包冲突的问题(maven helper)
冲突问题
解决问题
锁定jar版本

(6)当然我们调错误的时候也可以直接搜索有问题的包,如下
idea 中解决maven 包冲突的问题(maven helper)
冲突问题
解决问题
锁定jar版本

(7)选中右键就可以 Exclude 啦,想用1.2.28就把其他版本的Exclude掉,想用1.2.3就把其他版本的Exclude掉,是不是很方便。
idea 中解决maven 包冲突的问题(maven helper)
冲突问题
解决问题
锁定jar版本

锁定jar版本

面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本的为准添加到工程中,此方法在企业开发中常用。

如下的配置是锁定了spring-beans和spring-context的版本

 
  <dependencyManagement>
  	<dependencies>
  		<!--这里锁定版本为4.2.4 -->
  		<dependency>
  			<groupId>org.springframework</groupId>
  			<artifactId>spring-beans</artifactId>
  			<version>4.2.4.RELEASE</version>
  		</dependency>
		<dependency>
  			<groupId>org.springframework</groupId>
  			<artifactId>spring-context</artifactId>
  			<version>4.2.4.RELEASE</version>
  		</dependency>
  	</dependencies>
  </dependencyManagement>

注意:在工程中锁定依赖的版本并不代表在工程中添加了依赖,如果工程需要添加锁定版本的依赖则需要单独添加<dependencies></dependencies>标签,如下:

<dependencies>
  		<!--这里是添加依赖 -->
  		<dependency>
  			<groupId>org.springframework</groupId>
  			<artifactId>spring-beans</artifactId>
 		</dependency>
		<dependency>
  			<groupId>org.springframework</groupId>
  			<artifactId>spring-context</artifactId>
 		</dependency>
  	</dependencies>

上边添加的依赖并没有指定版本,原因是已在<dependencyManagement>中锁定了版本,所以在<dependency>下不需要再指定版本。