agentscope-ai / agentscope-ai/agentscope-java

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

Đang mở
#3,063 2 bình luận 0 reaction 0 người được giao Xem trên GitHub
bug
Ngôn ngữ chính
Java
Star
5.6k
Fork
1.3k
Merge trung bình
4 ngày 12 giờ
Pull request đã merge (30 ngày)
77

Mô tả

## 问题描述

在使用 `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 产生类冲突。

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.