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

启动XRebel时抛出异常,Spring Boot与Tomcat版本兼容问题求助

问题:XRebel 2024.3.0 与 Spring Boot 3.2.6(内嵌Tomcat 10.1.24)启动时抛出方法找不到异常

启动应用时出现如下异常:

XRebel: ERROR Class 'org.apache.catalina.connector.Response' could not be processed by com.zeroturnaround.xrebel.reqint.http.XrHttpServletResponseCBP@null: com.zeroturnaround.xrebel.bundled.javassist.NotFoundException: setStatus(..) is not found in org.apache.catalina.connector.Response
at com.zeroturnaround.xrebel.bundled.javassist.CtClassType.getDeclaredMethod(XRebel:1363)
at com.zeroturnaround.xrebel.reqint.http.XrHttpServletResponseCBP.a(XRebel:88)
at com.zeroturnaround.xrebel.reqint.http.XrHttpServletResponseCBP.process(XRebel:71)
at com.zeroturnaround.xrebel.cbp.JavassistClassBytecodeProcessor.process(XRebel:48)
at com.zeroturnaround.xrebel.bootstrap.q.a(XRebel:101)
at com.zeroturnaround.xrebel.bootstrap.q.a(XRebel:29)
at com.zeroturnaround.xrebel.bootstrap.q$1.a(XRebel:77)
at com.zeroturnaround.xrebel.bootstrap.q$1.a(XRebel:66)
at com.zeroturnaround.xrebel.nq$2.run(XRebel:35)
at com.zeroturnaround.xrebel.security.sdk.SecurityController.doWithoutSecurityManager(XRebel:32)
at com.zeroturnaround.xrebel.nu.a(XRebel:18)
at com.zeroturnaround.xrebel.nq.a(XRebel:32)
at com.zeroturnaround.xrebel.bootstrap.q.transform(XRebel:66)
at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:244)
at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at java.instrument/sun.instrument.InstrumentationImpl._jrDoTransform(InstrumentationImpl.java:541)
at java.instrument/sun.instrument.InstrumentationImpl._jrTransform(InstrumentationImpl.java:42001)
at java.base/com.zeroturnaround.jrebelbase.reorder.b.transform(SourceFile:180)
at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:43001)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader._jr$defineClass(ClassLoader.java:1017)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:43016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
at org.apache.catalina.connector.Connector.createResponse(Connector.java:917)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:308)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:840)

原因分析

Tomcat 10.1.24 对org.apache.catalina.connector.Response类的setStatus方法签名进行了调整,而XRebel 2024.3.0的字节码增强逻辑未适配该版本的方法变更,导致内置的Javassist库无法找到目标方法,触发异常。

解决方案

  • 升级XRebel到兼容版本:更新XRebel至官方发布的适配Tomcat 10.1.x的版本(如2024.4及以后版本),新版本通常会修复此类框架兼容性问题。
  • 排除目标类的XRebel增强:在xrebel.properties配置文件中添加排除规则,禁止XRebel对org.apache.catalina.connector.Response进行字节码处理:
    xrebel.exclude.classes=org.apache.catalina.connector.Response
    
  • 降级Tomcat版本:若暂时无法升级XRebel,可将Spring Boot依赖的Tomcat版本降级至XRebel兼容的版本(如10.1.20及以下)。修改项目构建文件:
    Maven示例:
    <properties>
        <tomcat.version>10.1.20</tomcat.version>
    </properties>
    
    Gradle示例:
    ext['tomcat.version'] = '10.1.20'
    
  • 清理JRebel缓存:若之前尝试过其他JRebel版本,删除项目根目录下的.rebel文件夹及用户目录中的JRebel缓存,避免旧配置残留引发冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:40:57