java.lang.IllegalAccessError:尝试访问字段

时间:2013-02-17 22:38:31

标签: java class gson loader

我收到错误:

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

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

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

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

至于为什么你在运行时获得它...如果JestHttpClient是第三方jar,而你自己没有编译它,你就不会收到编译它的错误。 JestHttpClient也可能是针对不同版本的Gson编译的,而不是你正在使用的版本 - 其中JsonNull.INSTANCE是公开的。