【问题标题】:java.lang.IllegalAccessError: tried to access fieldjava.lang.IllegalAccessError:试图访问字段
【发布时间】:2013-02-02 07:54:55
【问题描述】:

我收到错误:

java.lang.IllegalAccessError:试图从 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)

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

任何帮助将不胜感激。

【问题讨论】:

    标签: java class gson loader


    【解决方案1】:

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

    原来他们的 Jar 版本是 1.7.1 版本,它有不同版本的 JavaNull.java 和 JavaElement.java 类。

    【讨论】:

    • 您是如何解决问题的?我也有类似的问题
    【解决方案2】:

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

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

    【讨论】:

    • 我检查了 com.google.gson.JsonNull 的来源,但上面的情况并非如此 - public final class JsonNull extends JsonElement { /** * JsonNull 的单例 * * @since 1.8 */ public静态最终 JsonNull INSTANCE = new JsonNull();表示从 1.8 版开始就存在这种情况。
    • 如果我创建一个新的 TestNG 类如下: public class TestGsonJsonNull { @Test public void testJsonNull() { String data = "{}"; JsonElement 结果 = 新的 JsonParser().parse(data);返回 !result.equals(JsonNull.INSTANCE);在 Eclipse 中,JsonNull.INSTANCE 被标记为“JsonNull.INSTANCE 字段不可见”,但是如果我在 Eclipse 中创建一个新项目,然后只创建 gson-2.2.1.jar 和上面的测试代码,没有语法错误。此外,使用 Java 编译器无法在外部编译相同的代码。
    • 嗯。听起来您确实有两个版本的 Gson jar。我检查了 Gson SVN 存储库,它是 used to be private,但现在它是公开的。是否有可能在您提到的第一种情况下找出您的类路径不起作用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2016-05-31
    • 2020-12-30
    • 1970-01-01
    • 2022-12-22
    • 2014-07-20
    相关资源
    最近更新 更多