Java.lang.ClassNotFoundException: com.google.common.reflect.TypeToken

本文解决了在使用@FeignClient注解时遇到的依赖冲突问题,详细介绍了如何正确引入guava和archaius-core依赖来避免ClassNotFoundException错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导致错误的原因是因为使用@FeignClient注解的前提需要增加依赖
在这里插入图片描述
引入

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>18.0</version>
</dependency>

紧接着又报java.lang.ClassNotFoundException: com.netflix.config.CachedDynamicIntPropert
在这里插入图片描述
引入

<dependency>
    <groupId>com.netflix.archaius</groupId>
    <artifactId>archaius-core</artifactId>
    <version>0.7.6</version>
</dependency>
`java.lang.ClassNotFoundException` 是 Java 中常见的异常之一,表示运行时无法找到指定的类。当抛出 `java.lang.reflect.InaccessibleObjectException` 时,通常是因为尝试访问或修改一个不可访问的类成员(如私有字段或方法),并且未通过 `setAccessible(true)` 来绕过 Java 的访问控制检查。 如果出现 `ClassNotFoundException` 指向 `java.lang.reflect.InaccessibleObjectException`,则可能是以下原因导致: ### 原因分析 1. **JVM 版本不兼容** 在某些旧版本的 JVM 中,`InaccessibleObjectException` 可能不存在,或者其所在的模块未被正确加载。例如,Java 9 引入了模块系统(JPMS),部分反射相关的类可能需要显式声明依赖[^1]。 2. **类路径问题** 如果应用程序试图通过自定义类加载器加载类,但类路径配置错误,可能导致核心类如 `InaccessibleObjectException` 无法找到。这在使用隔离类加载环境(如 OSGi 或某些容器)时尤为常见[^1]。 3. **安全策略限制** 在启用安全管理器的情况下,某些类加载操作可能被阻止,导致 `InaccessibleObjectException` 被抛出,而该类本身又未能正确加载,从而引发 `ClassNotFoundException`。 4. **混淆工具或 AOT 编译问题** 使用 ProGuard、GraalVM Native Image 等工具时,若未正确保留反射所需的类和方法,可能导致运行时找不到 `InaccessibleObjectException` 类[^1]。 ### 解决方案 1. **确保 JVM 兼容性** 确保运行环境的 Java 版本与编译环境一致,并且支持所需类。对于 Java 9 及以上版本,确认是否启用了适当的模块(如 `--add-modules java.base`)。 2. **检查类加载机制** 避免使用非标准类加载器加载核心类。如果必须使用自定义类加载器,应确保其委托给父类加载器以保证核心类的可用性。 3. **更新安全管理策略** 如果启用了安全管理器,添加适当的权限允许类加载和反射操作: ```java grant { permission java.lang.RuntimePermission "accessDeclaredMembers"; permission java.lang.reflect.ReflectPermission "suppressAccessChecks"; }; ``` 4. **调整构建工具配置** 如果使用了代码混淆或提前编译工具,确保保留必要的反射类和方法。例如,在 GraalVM Native Image 配置中添加: ```json { "name": "java.lang.reflect.InaccessibleObjectException", "allDeclaredConstructors": true, "allPublicMethods": true } ``` 5. **避免不必要的反射操作** 如果应用逻辑中频繁使用反射来访问私有成员,考虑重构代码以使用公共 API 或设计模式,减少对 `setAccessible(true)` 的依赖。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值