java.lang.NoSuchFieldError: INSTANCE异常解决方法
原因: 启动的项目jar包冲突,具体来说就是相同的jar包至少存在两个不同版本,例如如下日志:
Caused by: java.lang.NoSuchFieldError: INSTANCE at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
解决方法:(背景:maven项目并且在第三方外部jar依赖)
❶ 找到DefaultHttpRequestWriterFactory所在jar,并记录下jar所在maven坐标,例如: DefaultHttpRequestWriterFactory所在jar包坐标如下:
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>❷ pom.xml所在目录执行 mvn dependency:tree -Dverbose -Dincludes=org.apache.httpcomponents:httpclient
$ mvn dependency:tree -Dverbose -Dincludes=org.apache.httpcomponents:httpcore
[INFO] Scanning for projects...
[INFO] -------------------< azkaban.execapp:azkaban-server >-------------------
[INFO] Building azkaban-server 3.9.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli)---
[INFO] \- org.apache.hadoop:hadoop-common:jar:2.7.3:compile
[INFO] \- net.java.dev.jets3t:jets3t:jar:0.9.0:compile
[INFO] \- org.apache.httpcomponents:httpcore:jar:4.1.2:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
从结果可以得知hadoop-common.jar依赖传递了一个httpcore:jar,版本为4.1.2,而我的第三方外部依赖也存在一个httpcore.jar,版本为4.5,所以出错❸ 排除依赖
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
</exclusion>
</exclusions>
</dependency>❹ 如果不是maven环境,只能人为一个个的jar包去排除,祝您好运!!!
java.lang.NoSuchFieldError: INSTANCE
于 2022-06-23 14:08:27 首次发布