You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX集成EclipseLink与H2启动报ClassVisitor相关错误求助

核心错误原因

运行时抛出IncompatibleClassChangeError是EclipseLink版本冲突+ASM库版本不兼容导致的:从错误栈可见你pom声明的EclipseLink版本为2.7.8,但运行时实际加载了2.5.0版本的类,两个版本依赖的ASM字节码处理库不兼容,低版本中org.eclipse.persistence.internal.libraries.asm.ClassVisitor是接口,高版本已改为抽象类,导致实现类加载失败。

解决步骤

  • 排查并统一EclipseLink版本
    执行mvn dependency:tree命令查看所有EclipseLink相关依赖的实际加载版本,排除所有隐式引入的低版本(2.5.0)EclipseLink、JPA规范包依赖,确保全局只有2.7.8版本的EclipseLink生效。
  • 补全依赖配置
    2.7.8版本EclipseLink需要配套对应版本的JPA规范包,修改pom.xml依赖如下:
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.7.8</version>
</dependency>
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>javax.persistence</artifactId>
    <version>2.2.3</version>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.200</version>
</dependency>
  • 修正module-info.java配置
    JPMS模块环境下需要给EclipseLink开放对应包的反射访问权限,示例配置如下:
module 你的项目模块名 {
    requires javafx.controls;
    requires javafx.fxml;
    requires eclipselink;
    requires java.persistence;
    requires com.h2database;

    // 开放JPA实体类所在包给EclipseLink反射访问
    opens 你的实体类包路径 to eclipselink;
    // 开放存放persistence.xml的META-INF所在的根包
    opens 你的项目根包路径 to eclipselink;
}
  • 清理缓存重新构建
    执行mvn clean install删除旧编译产物,重新构建后启动项目即可。

内容的提问来源于stack exchange,提问作者Maxim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:39:00