我收到错误:
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访问字段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)
不确定为什么会出现此错误。我知道如果有两个单独的类加载器,这是可能的。但是我没有做任何特殊的事情来加载多个类加载器。
非常感谢任何帮助。
答案 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是公开的。