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

如何通过Gradle将Spring Boot 2.7切换至Jetty 10?

解决Spring Boot 2.7切换Jetty 9到Jetty 10的依赖版本问题

核心结论

不用显式声明所有Jetty 10依赖也能完成切换,但必须正确利用Spring Boot的依赖版本管理机制——单纯设置ext['jetty.version']在Gradle里优先级不够,得结合版本属性覆盖或Spring BOM来生效。

为什么你的配置没生效?

Spring Boot 2.7的spring-boot-starter-jetty里,Jetty组件的版本是由Spring Boot的BOM(物料清单)管控的。你直接用ext['jetty.version']设置的版本,优先级低于BOM中定义的Jetty 9版本,所以像jetty-servlets、jetty-webapp这类未被排除的依赖,还是会沿用旧版本。

正确的Gradle配置方案

方案1:通过Spring BOM统一覆盖版本

导入Spring Boot BOM并指定Jetty 10版本,让所有Jetty依赖自动对齐:

plugins {
    id 'org.springframework.boot' version '2.7.10'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    id 'java'
}

dependencyManagement {
    imports {
        mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
    }
    dependencies {
        dependencySet(group: 'org.eclipse.jetty', version: '10.0.14') {
            entry 'jetty-servlets'
            entry 'jetty-webapp'
            entry 'jetty-server'
            entry 'jetty-util'
            // 按需添加其他Jetty核心组件
        }
    }
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-jetty'
    // 排除Jetty 9中与10不兼容的WebSocket依赖(包结构从javax迁移到jakarta)
    implementation ('org.springframework.boot:spring-boot-starter-jetty') {
        exclude group: 'org.eclipse.jetty.websocket', module: 'websocket-server'
        exclude group: 'org.eclipse.jetty.websocket', module: 'javax-websocket-server-impl'
    }
    // 若需要WebSocket支持,添加Jetty 10对应依赖
    implementation 'org.eclipse.jetty.websocket:websocket-jakarta-server:10.0.14'
}

方案2:直接设置全局版本属性

如果不用dependency-management插件,直接把jetty.version设为全局属性,让它优先级高于Spring Boot默认版本:

plugins {
    id 'org.springframework.boot' version '2.7.10'
    id 'java'
}

// 全局设置Jetty版本,覆盖Spring Boot默认值
jetty.version = '10.0.14'

dependencies {
    implementation ('org.springframework.boot:spring-boot-starter-jetty') {
        exclude group: 'org.eclipse.jetty.websocket', module: 'websocket-server'
        exclude group: 'org.eclipse.jetty.websocket', module: 'javax-websocket-server-impl'
    }
    // 按需添加Jetty 10的WebSocket依赖
    implementation 'org.eclipse.jetty.websocket:websocket-jakarta-server:10.0.14'
}

针对你疑问的解答

  1. 是否无需显式声明Jetty 10依赖即可完成切换?
    是的,只要通过版本属性或BOM正确覆盖版本,Spring Boot starter会自动拉取对应版本的Jetty核心依赖。但WebSocket组件因为Jetty 9到10的包结构变更(javax.websocket→jakarta.websocket),需要手动排除旧依赖并添加新的Jetty 10 WebSocket依赖。

  2. 是否必须使用Spring BOM?
    不是必须,但用BOM是最稳妥的方式——它能确保所有Jetty组件版本一致,避免版本冲突。如果不用BOM,直接设置全局版本属性也能生效,但要确保所有Jetty相关依赖都能被这个版本覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:15:17