Quarkus应用中@DynamoDBBean标注的POJO运行时报NoClassDefFoundError如何解决
排查解决步骤
- 检查
UserEntity类的基础配置
类必须声明为public,不能是非静态内部类;确认类上的注解是software.amazon.awssdk.enhanced.dynamodb.extensions.annotations.DynamoDbBean,不要导错其他同名注解的包;必须提供公开的无参构造方法,如果使用Lombok的@Data、@Builder注解,必须显式添加@NoArgsConstructor和@AllArgsConstructor注解,避免编译阶段自动生成的构造方法不符合SDK反射实例化的要求。 - 排查AWS SDK依赖版本冲突
所有software.amazon.awssdk组下的依赖(包括dynamodb、dynamodb-enhanced、core等)必须保持完全相同的版本,可执行mvn dependency:tree命令查看是否存在版本不一致的传递依赖,对低版本依赖执行exclude排除即可。 - 校验类加载环境兼容性
如果你使用了Spring Boot DevTools、Quarkus开发模式这类热部署工具,其使用的独立类加载器会导致SDK反射加载POJO时找不到类,可临时关闭热部署工具验证,或者将com.abc.entities包配置到热部署工具的共享加载路径中。 - 修正不可变类配置
从异常栈中的StaticImmutableTableSchema关键字可以看出SDK将你的POJO识别为不可变类进行处理,如果你没有使用不可变类的需求,不要给类添加@Immutable注解、不要将所有字段声明为final且不提供setter方法;如果确实需要使用不可变类,必须按照DynamoDB Enhanced SDK的规范给对应的Builder类添加@DynamoDbImmutableBuilder注解,确保Builder实例能被正常实例化。 - 检查打包配置
执行mvn clean package后解压生成的jar包,确认com/abc/entities/UserEntity.class文件存在,避免打包过滤规则误删了类文件。
内容的提问来源于stack exchange,提问作者Utesting
相关产品推荐
相关产品推荐

