Spring Boot 3.x 构建失败:Java 版本不兼容问题详解

spring boot 3.x 构建失败:java 版本不兼容问题详解——spring boot 3.x 要求 jdk 17+ 运行环境,而当前使用 jdk 11 导致 `spring-boot-maven-plugin:3.0.1` 的 `build-info` 目标加载失败——因插件字节码版本为 61.0(对应 java 17),jdk 11 仅支持至 55.0。升级 jdk 是根本解决方案。

Spring Boot 3.0 及以上版本(包括 spring-petclinic 主分支所用的 3.0.1)强制要求 JDK 17 或更高版本,这是官方明确规定的最低运行时要求。你遇到的错误:

Unable to load the mojo 'build-info' [...] 
has been compiled by a more recent version of the Java Runtime (class file version 61.0), 
this version of the Java Runtime only recognizes class file versions up to 55.0

清晰揭示了核心矛盾:

  • class file version 61.0 → 对应 Java 17(JDK 17 编译生成)
  • up to 55.0 → 对应 Java 11(JDK 11 最高兼容版本)

因此,JDK 14 并非推荐解法(尽管技术上可加载 61.0 字节码,但 Spring Boot 3.x 官方仅认证 JDK 17+)。Spring 官方文档明确指出:

"Spring Boot 3.0 requires Java 17 or later." —— Spring Boot 3.0 Release Notes

✅ 正确解决步骤如下:

  1. 卸载旧 JDK 11(可选,避免冲突)

    sudo apt remove openjdk-11-jdk
  2. 安装 JDK 17(推荐 LTS 版本)

    • Ubuntu/WSL2 推荐使用 Eclipse Temurin:
      # 添加仓库并安装
      sudo apt update && sudo apt install -y wget curl gnupg
      wget -O - https://packag

      es.adoptium.net/artifactory/api/gpg/key/public | sudo apt-key add - echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME=/ {print $2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/temurin.list sudo apt update sudo apt install -y temurin-17-jdk
  3. 验证并切换默认 Java 版本

    java -version  # 应输出类似:openjdk version "17.0.9" ...
    sudo update-alternatives --config java  # 选择 JDK 17 路径
    sudo update-alternatives --config javac
  4. 确认 Maven 使用正确 JDK

    mvn -v  # 输出中 "Java version" 必须为 17.x

    若仍显示 JDK 11,请设置环境变量:

    export JAVA_HOME=/usr/lib/jvm/temurin-17-jdk-amd64
    export PATH=$JAVA_HOME/bin:$PATH
  5. 清理并重新构建项目

    ./mvnw clean
    ./mvnw package  # 或直接 ./mvnw spring-boot:run

⚠️ 注意事项:

  • 不要尝试降级 Spring Boot 版本来适配 JDK 11——这违背项目现代化目标,且 spring-petclinic 主干已全面迁移至 Jakarta EE 9+ 和 Spring Boot 3;
  • 若需在本地同时维护 JDK 11 项目,建议使用 sdkman! 管理多 JDK 环境:
    curl -s "https://get.sdkman.io" | bash
    source "$HOME/.sdkman/bin/sdkman-init.sh"
    sdk install java 17.0.9-tem
    sdk use java 17.0.9-tem
  • Maven 3.6.0 可用,但建议升级至 3.8.6+ 以获得更好 JDK 17 兼容性与安全更新。

总结:该错误本质是JVM 版本不匹配引发的字节码加载失败,而非配置或网络问题。唯一可靠、符合 Spring Boot 3.x 设计契约的修复方式,是将开发环境升级至 JDK 17(LTS)或 JDK 21(最新 LTS)。完成升级后,spring-petclinic 将顺利通过编译、测试并启动。