问题描述
在使用 RedisAgentStateStore 进行 Agent 状态持久化测试时,运行抛出 NoSuchFieldError。
异常发生在框架内部 RedissonClientAdapter.evalScript() 方法,代码硬编码使用 RScript.ReturnType.LONG。
agentscope 2.0.3 的 jar 包通过 shade 内嵌了一份旧版 Redisson 类,内嵌版本的RScript.ReturnType枚举不存在 LONG 常量。
虽然项目 POM 已经引入 Redisson 3.52.0(该版本包含 LONG 枚举),但是 JVM 类加载优先加载 AgentScope jar 内自带的旧 Redisson 类,编译正常,运行时报字段缺失。业务代码无法修改框架源码。
复现步骤
- 创建 SpringBoot 3.5.11 项目,pom 引入依赖:
io.agentscope:agentscope:2.0.3、redisson-spring-boot-starter:3.52.0
- 使用框架提供的
RedisAgentStateStore 实现 Agent 状态持久化
- 启动项目,触发状态持久化逻辑,底层会调用
RedissonClientAdapter.evalScript 执行 Lua 脚本
- 抛出
NoSuchFieldError 异常
预期行为
RedisAgentStateStore 正常执行 Lua 脚本完成 Agent 状态持久化;框架内嵌 Redisson 不应该和项目引入的 Redisson 发生类冲突。
报错信息
java.lang.NoSuchFieldError: No static field LONG of type Lorg/redisson/api/RScript$ReturnType;
at io.agentscope.adapter.RedissonClientAdapter.evalScript(RedissonClientAdapter.java:228)
at io.agentscope.storage.redis.RedisAgentStateStore.[相关持久化方法]
异常发生在虚拟线程,调用链路来自RedisAgentStateStore持久化流程。
运行环境
- AgentScope-Java Version:2.0.3
- Java Version:21
- OS:Windows
补充说明
- Maven 依赖树显示项目依赖 Redisson 3.52.0,该版本
RScript.ReturnType包含 LONG 枚举,版本本身没问题。
- 冲突根本原因:
agentscope-2.0.3.jar使用 shade 打包内嵌旧 Redisson,未做包名 relocation 隔离;Maven 依赖树无法识别这种内嵌在 jar 里的 class。
- JVM 优先加载 agentscope 包内旧的
org.redisson.api.RScript$ReturnType,该枚举缺少 LONG 常量。
- 触发场景:
RedisAgentStateStore持久化 Agent 状态,底层调用RedissonClientAdapter.evalScript执行 Lua 脚本触发异常。
- 建议修复方案二选一:
- 移除 shade 内嵌 Redisson,改用 Maven 正常依赖管理;
- 对内置 Redisson 做包名重定向(relocation),避免与业务项目引入的 Redisson 产生类冲突。
问题描述
在使用
RedisAgentStateStore进行 Agent 状态持久化测试时,运行抛出NoSuchFieldError。异常发生在框架内部
RedissonClientAdapter.evalScript()方法,代码硬编码使用RScript.ReturnType.LONG。agentscope 2.0.3的 jar 包通过 shade 内嵌了一份旧版 Redisson 类,内嵌版本的RScript.ReturnType枚举不存在 LONG 常量。虽然项目 POM 已经引入 Redisson 3.52.0(该版本包含 LONG 枚举),但是 JVM 类加载优先加载 AgentScope jar 内自带的旧 Redisson 类,编译正常,运行时报字段缺失。业务代码无法修改框架源码。
复现步骤
io.agentscope:agentscope:2.0.3、redisson-spring-boot-starter:3.52.0RedisAgentStateStore实现 Agent 状态持久化RedissonClientAdapter.evalScript执行 Lua 脚本NoSuchFieldError异常预期行为
RedisAgentStateStore正常执行 Lua 脚本完成 Agent 状态持久化;框架内嵌 Redisson 不应该和项目引入的 Redisson 发生类冲突。报错信息
异常发生在虚拟线程,调用链路来自
RedisAgentStateStore持久化流程。运行环境
补充说明
RScript.ReturnType包含 LONG 枚举,版本本身没问题。agentscope-2.0.3.jar使用 shade 打包内嵌旧 Redisson,未做包名 relocation 隔离;Maven 依赖树无法识别这种内嵌在 jar 里的 class。org.redisson.api.RScript$ReturnType,该枚举缺少 LONG 常量。RedisAgentStateStore持久化 Agent 状态,底层调用RedissonClientAdapter.evalScript执行 Lua 脚本触发异常。