agentscope-ai / agentscope-ai/agentscope-java

[Bug]:Class org.redisson.api.RScript$ReturnType does not have member field 'org.redisson.api.RScript$ReturnType LONG'

Aperta
#3,063 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub
bug
Lingua principale
Java
Stelle
5.6k
Fork
1.3k
Merge medio
4g 12h
PR unite (30g)
77

Descrizione

## 问题描述

在使用 `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 类,编译正常,运行时报字段缺失。业务代码无法修改框架源码。

## 复现步骤

1. 创建 SpringBoot 3.5.11 项目,pom 引入依赖:`io.agentscope:agentscope:2.0.3`、`redisson-spring-boot-starter:3.52.0`
2. 使用框架提供的 `RedisAgentStateStore` 实现 Agent 状态持久化
3. 启动项目,触发状态持久化逻辑,底层会调用 `RedissonClientAdapter.evalScript` 执行 Lua 脚本
4. 抛出 `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

## 补充说明

1. Maven 依赖树显示项目依赖 Redisson 3.52.0,该版本`RScript.ReturnType`包含 LONG 枚举,版本本身没问题。
2. 冲突根本原因:`agentscope-2.0.3.jar`使用 shade 打包内嵌旧 Redisson,**未做包名 relocation 隔离**;Maven 依赖树无法识别这种内嵌在 jar 里的 class。
3. JVM 优先加载 agentscope 包内旧的`org.redisson.api.RScript$ReturnType`,该枚举缺少 LONG 常量。
4. 触发场景:`RedisAgentStateStore`持久化 Agent 状态,底层调用`RedissonClientAdapter.evalScript`执行 Lua 脚本触发异常。
5. 建议修复方案二选一:
- 移除 shade 内嵌 Redisson,改用 Maven 正常依赖管理;
- 对内置 Redisson 做包名重定向(relocation),避免与业务项目引入的 Redisson 产生类冲突。

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.