jar 包冲突 java.lang.NoSuchFieldError

 java.lang.NoSuchFieldError: INSTANCE异常,可能是jar包冲突了。

我遇到的情况是maven里引入了一个JAR,而我又在lib里面引入了这个jar,并且版本还不相同,就出了这个错。


解决办法:

1


mvn dependency:tree -dverbose

jar 包冲突 java.lang.NoSuchFieldError_第1张图片


jar 包冲突 java.lang.NoSuchFieldError_第2张图片

后来在看另外一个文章的时候,有人提到最好用\-来表示同一层依赖的最后一个节点,一下子意识到上面的mvn命令输出中的\-应该就是这个意思。

何为同一层依赖的最后一个节点?打个可能不太恰当的比喻:他是他爸最小的儿子


递归依赖的关系列的算是比较清楚了,每行都是一个jar包,根据缩进可以看到依赖的关系。

  • 最后写着compile的就是编译成功的。
  • 最后写着omitted for duplicate的就是有jar包被重复依赖了,但是jar包的版本是一样的。
  • 最后写着omitted for conflict with xxxx的,说明和别的jar包版本冲突了,而该行的jar包不会被引入。 (org.apache.poi:poi-ooxml-schemas:jar:3.15:compile - omitted for conflict with 3.14
  • 比如上面有一行最后写着omitted for conflict with 3.14, 与 3.15 冲突了



2

(1)  安装使用插件 maven Helper 插件, 重新启动idea 后插件才能生效

jar 包冲突 java.lang.NoSuchFieldError_第3张图片

(2)

在IntelliJ中打开项目的pom.xml文件,在文件编辑器的左下方,会看到两个tab,一个是“Text”,另一个是“Dependency Analyzer”:
jar 包冲突 java.lang.NoSuchFieldError_第4张图片

红颜色表示 底层的jar 引用冲突  

右键,可以查看 和 exclison

jar 包冲突 java.lang.NoSuchFieldError_第5张图片


jar 包冲突 java.lang.NoSuchFieldError_第6张图片

你可能感兴趣的:(工具调试)