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

Jetty 12.x升级启动报错:NoSuchMethodError: ServerConnector.setSoLingerTime(int)

问题分析与解决方案

问题原因

java.lang.NoSuchMethodError 是因为 Restlet 2.4.1 的 Jetty 扩展依赖旧版 Jetty API,而你升级到的 Jetty 12.0.8 属于重大版本迭代,API 发生了破坏性变更:

  • Jetty 9.x 中 ServerConnector.setSoLingerTime(int) 方法在 Jetty 12 里已被移除,相关配置逻辑移至 SocketConfiguration.setSoLinger(int) 中
  • Restlet 2.4.1 的 JettyServerHelper 仍在调用旧方法,导致运行时无法找到对应方法

解决方案

方案1:升级Restlet到支持Jetty 12的版本

Restlet 2.4.x 仅适配 Jetty 9.x 系列,若要使用 Jetty 12,需将 Restlet 升级到 3.2.x 及以上版本(Restlet 3.2 开始适配 Jetty 10+,Jetty 12 属于最新分支,建议使用 Restlet 最新稳定版)。

修改 pom.xml 中的 Restlet 依赖:

<dependency>
    <groupId>org.restlet.jse</groupId>
    <artifactId>org.restlet.ext.jetty</artifactId>
    <version>3.2.0</version> <!-- 替换为支持Jetty 12的版本 -->
</dependency>

同时需同步升级其他 Restlet 核心依赖到对应版本,避免版本不一致引发新问题。

方案2:降级Jetty到Restlet 2.4.1兼容的版本

如果暂时无法升级 Restlet,需将 Jetty 版本降级到 9.4.x 系列(Restlet 2.4.1 官方适配的 Jetty 版本),修改 pom.xml 中所有 Jetty 依赖的版本:

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-client</artifactId>
    <version>9.4.52.v20230823</version> <!-- 9.4.x最新稳定版 -->
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>9.4.52.v20230823</version>
</dependency>
<!-- 其他Jetty依赖同步修改版本 -->

方案3:自定义JettyServerHelper(临时应急方案)

若必须同时使用 Restlet 2.4.1 和 Jetty 12,可自定义 JettyServerHelper 重写 createConnector 方法,替换旧 API 调用:

  1. 复制原 JettyServerHelper 代码到项目中
  2. 修改 createConnector 中调用 setSoLingerTime 的逻辑:
    // 原代码
    // connector.setSoLingerTime(lingerTime);
    // 替换为Jetty 12的API
    connector.getSocketConfiguration().setSoLinger(lingerTime);
    
  3. 通过 Restlet 的 SPI 机制配置使用自定义的 Helper 实现

此方法需要维护自定义代码,后续升级 Restlet 时需同步更新,仅建议临时应急使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:31:21