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

JDK11升级到17后Javassist 3.28.0-GA调用CtClass#toClass报错如何解决

JDK17升级后Javassist 3.28.0-GA调用CtClass#toClass报错解决方案

该报错是JDK17强化了模块化访问限制,默认不允许未命名模块反射访问java.base模块下java.lang包的非公开方法导致的,Javassist 3.28版本的内部实现仍依赖反射调用ClassLoader的defineClass方法,因此触发权限拦截。可行解决方案如下:

  • 方案1:升级Javassist至兼容版本(优先推荐)
    Javassist从3.29.0-GA版本开始正式适配JDK17的访问规则,移除了对非法反射访问的依赖,直接升级依赖版本即可解决问题,无需额外配置。
    Maven依赖配置参考:

    <dependency>
        <groupId>org.javassist</groupId>
        <artifactId>javassist</artifactId>
        <version>3.29.0-GA</version>
    </dependency>
    

    Gradle依赖配置参考:

    implementation 'org.javassist:javassist:3.29.0-GA'
    
  • 方案2:添加JVM启动参数临时兼容
    若受项目约束暂时无法升级Javassist版本,可以在JVM启动参数中添加如下配置,开放对应包的反射访问权限:

    --add-opens java.base/java.lang=ALL-UNNAMED
    

    Jar包运行时启动命令示例:

    java --add-opens java.base/java.lang=ALL-UNNAMED -jar your-application.jar
    

    注意:该方案会降低JDK模块化的安全防护能力,仅建议作为临时过渡方案使用。

  • 方案3:模块化项目专属配置
    若你的项目是JDK9+的模块化项目(根目录存在module-info.java文件),可以直接在模块描述文件中添加如下配置,单独为Javassist开放访问权限:

    opens java.lang to javassist;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:36:04