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

Dubbo集成Jetty启动Jar包时出现NoSuchMethodError循环报错求助

解决Dubbo集成Jetty启动时循环输出NoSuchMethodError异常的问题

我之前碰到过好几次Dubbo和Jetty版本冲突导致的这类问题,咱们一步步来解决:

问题本质分析

你看到的java.lang.NoSuchMethodError: org.mortbay.thread.Timeout.tick(J)V异常,核心原因是Jetty依赖版本冲突。Dubbo内部默认依赖了老版本的Mortbay Jetty(包前缀org.mortbay),如果你的项目同时引入了其他版本的Jetty(不管是同系列的不同版本,还是新版本的Eclipse Jetty),就会导致类加载时找不到对应的方法,进而引发Jetty连接器反复停止重启,循环输出日志。

具体解决步骤

1. 排查依赖冲突

首先得确认项目里到底有哪些Jetty依赖:

  • 如果用Maven,在项目根目录执行:
    mvn dependency:tree | grep org.mortbay.jetty
    
  • 如果用Gradle,执行:
    ./gradlew dependencies | grep org.mortbay.jetty
    
    看看输出里是不是有多个不同版本的Jetty相关依赖,比如Dubbo自带的版本和你项目手动引入的版本不一致。

2. 排除冲突依赖

找到冲突来源后,在Dubbo的依赖中排除它自带的Jetty相关包,或者反过来排除项目中引入的冲突版本。比如Maven中修改Dubbo依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>你的Dubbo版本号</version>
    <exclusions>
        <!-- 排除Dubbo自带的Jetty核心包 -->
        <exclusion>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty</artifactId>
        </exclusion>
        <!-- 排除Jetty工具包 -->
        <exclusion>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-util</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3. 统一Jetty版本

在项目的dependencyManagement中指定统一的Mortbay Jetty版本,确保所有依赖都使用同一版本(推荐和Dubbo兼容的6.1.26版本,大部分Dubbo版本都适配这个):

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty</artifactId>
            <version>6.1.26</version>
        </dependency>
        <dependency>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-util</artifactId>
            <version>6.1.26</version>
        </dependency>
    </dependencies>
</dependencyManagement>

4. 检查Dubbo配置

最后确认你的Dubbo协议配置没有重复或错误,比如在dubbo.xml中:

<!-- Dubbo核心协议 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- Jetty协议配置,确保只配置一次 -->
<dubbo:protocol name="jetty" port="9099" server="jetty" />

避免重复配置Jetty服务导致多实例启动冲突。

额外提示

如果是Spring Boot整合Dubbo,要注意Spring Boot默认的Jetty是新版本的Eclipse Jetty(包前缀org.eclipse.jetty),和Dubbo依赖的Mortbay Jetty是完全不同的包,这种情况下更要仔细排查依赖树,避免两种Jetty同时存在引发类加载问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:19:23