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

从JDK11 Corretto+Spring4.3升级到JDK17 Corretto+Spring6.1启动报错

JDK17 Corretto + Spring6.1升级启动报错:IncompatibleClassChangeError(Jetty HttpURI相关)

错误原因

核心异常java.lang.IncompatibleClassChangeError表明:org.eclipse.jetty.http.HttpURI$Mutable试图实现org.eclipse.jetty.http.HttpURI,但后者是类而非接口。这是典型的Jetty版本冲突问题——不同版本的Jetty中,HttpURI的定义发生了变更(旧版本为接口,新版本改为类,反之亦然),导致类加载时出现不兼容。

解决方案

  • 统一Jetty依赖版本
    Spring 6.1需搭配适配JDK17的Jetty版本(推荐Jetty 11.x系列)。在项目依赖管理中统一声明Jetty版本,确保所有Jetty相关组件(如jetty-server、jetty-http、jetty-websocket)版本一致。
    Maven示例:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-bom</artifactId>
                <version>11.0.15</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  • 排除冲突的Jetty依赖
    使用依赖分析工具定位冲突来源:

    • Maven执行:mvn dependency:tree
    • Gradle执行:./gradlew dependencies
      找到引入旧版本Jetty的第三方依赖,在依赖声明中排除对应Jetty组件。示例:
    <dependency>
        <groupId>com.example.legacy-lib</groupId>
        <artifactId>legacy-lib</artifactId>
        <version>x.x.x</version>
        <exclusions>
            <exclusion>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-http</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-server</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  • 统一Web容器依赖
    异常栈同时出现Tomcat(Catalina)和Jetty类,说明项目混合引入了两种容器依赖。根据需求二选一:

    • 若使用Tomcat:移除所有Jetty相关依赖,确保Spring使用默认的Tomcat容器。
    • 若使用Jetty:排除Spring Web starter中的Tomcat依赖,引入Jetty starter。示例:
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
          <exclusions>
              <exclusion>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-tomcat</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-jetty</artifactId>
      </dependency>
      
  • 清理缓存重新构建
    清理本地依赖缓存(Maven的.m2/repository、Gradle的.gradle/caches),重新执行构建命令,确保加载的是最新的兼容版本依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:12:18