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

在Jetty中引入activemq-all出现NoSuchMethodException的原因

问题分析与解决:Jetty下引入activemq-all触发NoSuchMethodException

问题场景

Jetty环境部署应用时,引入activemq-all依赖后出现NoSuchMethodException,替换为activemq-client依赖后错误消失。

错误信息

Caused by: java.lang.NoSuchMethodException: org.springframework.jms.annotation.JmsBootstrapConfiguration$$EnhancerBySpringCGLIB$$17cf8886.CGLIB$SET_THREAD_CALLBACKS([Lorg.springframework.cglib.proxy.Callback;)
    at java.lang.Class.getDeclaredMethod(Class.java:2130)
    at org.springframework.cglib.proxy.Enhancer.getCallbacksSetter(Enhancer.java:912)
    at org.springframework.cglib.proxy.Enhancer.access$000(Enhancer.java:93)
    at org.springframework.cglib.proxy.Enhancer$EnhancerFactoryData.<init>(Enhancer.java:502)

原因分析

activemq-all是ActiveMQ的全量依赖包,内置了旧版本的cglib库。而Spring框架依赖的是适配自身版本的cglib,Jetty加载应用时,全量包中的旧版cglib会覆盖Spring自带的cglib版本,导致Spring动态代理生成的类找不到对应方法——不同cglib版本的动态代理方法签名或生成逻辑存在差异,最终触发NoSuchMethodException。

activemq-client是仅包含客户端核心功能的轻量依赖,不附带多余第三方库(如cglib),不会与Spring的依赖产生冲突,因此错误消失。

解决方案

  • 优先使用activemq-client替代activemq-all,只引入必要的客户端功能,从根源避免依赖冲突。
  • 若必须使用activemq-all,通过依赖排除规则移除其中的cglib依赖,确保Spring使用自身适配版本。以Maven为例:
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-all</artifactId>
    <version>你的版本号</version>
    <exclusions>
        <exclusion>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
        </exclusion>
    </exclusions>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:57:04