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

java.lang.IllegalAccessError:尝试访问字段,java,class,gson,loader,Java,Class,Gson,Loader,我得到一个错误: 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.c

我得到一个错误:

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 位于io.searchbox.client.http.JestHttpClient.isJson(JestHttpClient.java:155) 位于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)

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


任何帮助都将不胜感激。

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


至于为什么要在运行时获取它……如果JestHttpClient是第三方jar,并且您自己没有编译它,那么编译它时不会出现错误。也有可能JestHttpClient是根据与您正在使用的不同版本的Gson编译的——其中JsonNull.INSTANCE是公共的。

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


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

我检查了com.google.gson.JsonNull的源代码,但上述情况并非如此-公共最终类JsonNull扩展了jsoneElement{/***singleton for JsonNull**@since 1.8*/public static final JsonNull INSTANCE=new JsonNull();表明这在1.8版之后就已经存在了。如果我创建一个新的TestNG类,如下所示:public class TestGsonJsonNull{@Test public void testJsonNull(){String data=“{}”;jsonement result=new JsonParser().parse(data);return!result.equals(JsonNull.INSTANCE);}}}在Eclipse中,JsonNull.INSTANCE被标记为“字段JsonNull.INSTANCE不可见”,但是如果我在Eclipse中创建一个新项目,然后只创建gson-2.2.1.jar和上面的测试代码,就不会有语法错误。同样的代码也不会在外部使用Java compiler.Hmmm进行编译。听起来好像有两个版本的gson jar。我检查了gson SVN repo,它是公共的。是吗在你提到的第一个例子中,你可以找出你的类路径在哪里不起作用?你是如何解决这个问题的?我有一个类似的问题