2

我收到错误消息:

java.lang.IllegalAccessError:试图从 jar 中的类 Jest-0.0.2.jar 中的方法访问字段 com.google.gson.JsonNull.INSTANCE。我还使用 gradle 工件加载了包 com.google.gson: compile 'com.google.code.gson:gson:2.2.1'

所有项目编译正常,但在运行时,我收到以下错误:

java.lang.IllegalAccessError:试图从 io.searchbox.client.http.JestHttpClient.isJson(JestHttpClient.java:155) 的类 io.searchbox.client.http.JestHttpClient 访问字段 com.google.gson.JsonNull.INSTANCE io.searchbox.client.http.JestHttpClient.createJsonStringEntity(JestHttpClient.java:142) 在 io.searchbox.client.http.JestHttpClient.constructHttpMethod(JestHttpClient.java:117) 在 io.searchbox.client.http.JestHttpClient.execute( JestHttpClient.java:46)

不知道为什么会出现这个错误。我知道如果有两个单独的类加载器,这是可能的。但是我没有做任何特别的事情来加载多个类加载器。

任何帮助将非常感激。

4

2 回答 2

3

发现了问题。并不是我加载了两个版本的 Gson jar,而是另一个第三方 Jar,tika-app-1.2.jar,它实际上将包 com.google.gson 捆绑为他们的 jar 的一部分。

事实证明,他们拥有的 Jar 版本是 1.7.1 版本,它具有不同版本的 JavaNull.java 和 JavaElement.java 类。

于 2013-02-18T20:58:12.610 回答
0

听起来 JsonNull.INSTANCE 是受保护的或私有的,并且您正试图直接从 JestHttpClient 访问它,它在 JsonNull 的包(com.google.gson)之外。

至于为什么在运行时得到它...如果 JestHttpClient 是第三方jar,并且您没有自己编译它,则编译它不会出错。也有可能 JestHttpClient 是针对与您正在使用的版本不同的 Gson 版本编译的——其中 JsonNull.INSTANCE 是公开的。

于 2013-02-17T22:42:57.340 回答