Springboot 2.x + Java 1.8升级到Springboot 3.x + OpenJDK 17笔记

引言

截止至2025年3月,OpenJDK已经开发到版本OpenJDK 25了。由于项目还再用Java 1.8(对应于OpenJDK 8),被SonerQube扫出一堆安全问题。因此,尝试使用通义灵码对整个项目升级,可惜结果差强人意,最后几个小改动后终于完成了升级。

Java版本的改动

这是一个maven项目,首先我们要把Project的JDK和pom.xml里面的Java版本号都改为17。

Spring Boot 3.x至少需要OpenJDK 17。

Project Settings - SDK

<!-- pom.xml -->
...
    <properties>
        <java.version>17</java.version>
    </properties>
...

Spring Boot的改动

Spring Boot当前最新包是3.4.4(截止于2025年3月)

修改pom.xml里面的引用

首先需要把这个parent更新到最新版本。

<!-- pom.xml -->
...
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.4</version> <!-- 更新版本号 -->
        <relativePath/>
    </parent>
...

修改所有Java里面的引入包

从Spring Boot 3.0.0开始,Spring Boot弃用了Java EE(javax包已经不再维护)并开始使用Jakarta EE(jakarta包继承了javax包,并由Eclipse基金会继续发展),因此我们需要把所有的javax.servlet包替换成jakarta.servlet包。

// LogonController.java
...
import jakarta.servlet.http.HttpSession;
...

修改application-dev.yml

Spring Boot 3.x的静态资源配置多了一层web,因此要加上。

# application-dev.yml
...
spring:
  web:
    resources:
      static-locations: classpath:/webapp/
...

Swagger的改动

当Spring Boot升级到3.x后,这期间发生了一连串的事情:

  • Spring Boot 3.0.0后转用了Jakarta EE
  • Swagger 2.0 (Springfox) 使用的是javax.*,而且一直不兼容jakarta.*。
  • Swagger规范被捐献给Linux基金会。Linux基金会随后把Swagger正式改名为OpenAPI Specification (OAS) (aka. Swagger 3.0)

因此原来的Swagger会被改名为OpenAPI,连带产生一连串的改动。

修改web.xml里面的包引用

我们需要引入新规范的包(常用springdoc),并删掉原来的springfox包。

<!-- web.xml -->
...
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>2.8.6</version>
        </dependency>
...

修改Config文件

删掉原来的SwaggerConfig.java并加入新的OpenApiConfig.java

// OpenApiConfig.java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;

@Configuration
public class OpenApiConfig {

    @Bean
    public OpenAPI springOpenAPI() {
        return new OpenAPI().info(new Info()
                .title("SpringDoc API")
                .description("SpringDoc Simple Application")
                .version("0.0.1"));
    }
}

修改application-dev.yml

springdoc有自己的配置,因此要加上。

# application-dev.yml
...
springdoc:
  api-docs:
    enabled: true
  swagger-ui:
    persistAuthorization: true
...

修改每个API里面的声明

这部分我基本交给了通义灵码来处理,毕竟都是一些体力活。简单总结一下就是:

  • io.swagger.*会被io.swagger.v3.oas.*所取代。
  • ApiOperation改为Operation。
  • ApiParam改为Parameter。
  • 声明里面的属性名都有变化。
  • ……

所以还是交给AI来做吧。

总结

在更新项目之后,SonarQube 的评分终于好看多了,忍不住来简单记录一下这段“提分”历程!

顺带一提——整个代码修改过程其实只花了1-2个小时,真正花时间的反而是这份总结文档,写了整整5-6个小时!这不禁让我感叹一句:
知识果然才是最昂贵的“商品”,动手容易,讲明白太难了!

<think> 首先,用户的问题是:“我想查找在IntelliJ IDEA 2019.3.3版本中创建Spring Boot项目时无法选择Java 1.8的解决方案”。用户还提供了几个引用,我需要参考这些内容,但用户说“上述引用仅供参考,并不是用户真正的需求”,所以我应该基于用户的实际问题来回答。 用户的关键需求是:在IntelliJ IDEA 2019.3.3中创建Spring Boot项目时,无法选择Java 1.8,需要解决办法。 现在,回顾系统指令: - 使用中文回答。 - 行内数学表达式用$...$,但这里可能没有数学内容,所以不需要。 - 独立公式用$$...$$,但这里没有。 - LaTeX语法正确。 - 生成相关问题。 - 在回答中引用的段落末尾添加引用标识,如[^1]。 - 结构清晰,逐步解决问题。 - 基于用户上一次的问题和我的回答;用户上一次的问题似乎是关于快速排序的,但当前问题不同,所以我需要从头开始。 用户提供的引用: - 引用[1]:关于IntelliJ IDEA 2024.1.1创建Spring Boot项目的指南。 - 引用[2]:关于IntelliJ IDEA 2021.3.1找不到Spring Initializr的解决方案,提到检查插件和版本。 - 引用[3]:关于IntelliJ IDEA Community Edition 2023.3.1创建Spring Boot项目。 用户的问题是针对2019.3.3版本的IDEA,所以引用不是直接相关的,但我可以参考其中的通用建议。 可能的解决方案: 1. **检查JDK设置**:确保IntelliJ IDEA中安装了Java 1.8 JDK。在创建项目时,需要配置JDK。 2. **插件问题**:引用[2]提到插件缺失可能导致问题。检查Spring Boot相关的插件是否启用。 3. **项目创建向导**:在创建Spring Boot项目时,Spring Initializr可能没有正确加载Java 8选项。 4. **手动配置**:如果向导中无法选择,可以手动设置项目使用Java 8。 5. **版本兼容性**:2019.3.3版本可能与某些Spring Boot版本或JDK版本有兼容性问题。 基于用户的问题,一步步解决: - 步骤1:确认Java 1.8 JDK是否在IDEA中安装。 - 步骤2:检查Spring Boot插件是否安装和启用。 - 步骤3:尝试在创建项目时选择正确的选项。 - 步骤4:如果不行,手动配置项目。 - 步骤5:其他建议。 生成相关问题:系统指令说“生成相关问题”,所以我需要在回答后添加相关问题。 回答结构: - 清晰的结构:介绍问题、提供一步一步的解决方案、总结。 - 使用引用:如果适用,引用用户提供的引用内容。 - 末尾添加相关问题。 引用用户提供的引用: - 引用[2]提到插件设置,这可能是相关的。 - 引用[3]提到手动修改pom.xml和运行项目,但这不直接相关。 实际解决方案: - 在IntelliJ IDEA中,创建Spring Boot项目时,JDK选择通常在项目创建向导中。 - 如果无法选择Java 1.8,可能是因为JDK没有注册或插件问题。 - 常见步骤: 1. 打开File > Project Structure > Platform Settings > SDKs,确保Java 1.8 JDK已添加。 2. 在创建新项目时,选择Spring Initializr,并在向导中选择JDK版本。 3. 如果向导中没有Java 8选项,检查Spring Boot版本是否支持Java 8;某些较新版本可能不再支持。 4. 手动配置:创建普通Java项目,然后添加Spring Boot依赖。 确保回答真实可靠:基于常见知识,IDEA的JDK设置是关键。 最后,添加引用标识:如果我在回答中提到引用中的内容,就在末尾添加[^n]。 相关问题: 1. 如何在IntelliJ IDEA中安装和管理JDK? 2. IntelliJ IDEA创建Spring Boot项目时常见问题有哪些? 3. 如何手动配置Spring Boot项目使用特定Java版本? 用中文回答。 </think> ### 解决 IntelliJ IDEA 2019.3.3 创建 Spring Boot 项目无法选择 Java 1.8 的问题 在 IntelliJ IDEA 2019.3.3 中创建 Spring Boot 项目时无法选择 Java 1.8,通常是由 JDK 配置缺失、插件问题或 Spring Initializr 兼容性问题导致的。以下提供逐步解决方案,确保您能顺利创建项目。本方案基于 IntelliJ IDEA 的通用配置原理和常见问题处理逻辑(参考用户提供的引用[2]和[3]中关于插件和手动配置的建议)。 #### 步骤 1: 确认 Java 1.8 JDK 是否已安装并注册到 IDEA - **为什么重要**:IntelliJ IDEA 在创建 Spring Boot 项目时需要识别系统中的 JDK。如果 Java 1.8 未注册,向导中将无法显示该选项。 - **操作步骤**: 1. 打开 IntelliJ IDEA 2019.3.32. 进入菜单:**File** > **Project Structure**(或按 `Ctrl+Alt+Shift+S`)。 3. 在左侧面板选择 **Platform Settings** > **SDKs**。 4. 检查列表中是否有 Java 1.8 JDK: - 如果不存在,点击 **+** 图标 > **Add JDK** > 浏览到您安装的 JDK 目录(例如 `C:\Program Files\Java\jdk1.8.0_XXX` 或 `/Library/Java/JavaVirtualMachines/jdk1.8.0_XXX.jdk/Contents/Home`)。 - 选择后,点击 **Apply** > **OK**。 5. 验证 JDK:在 **Project Settings** > **Project** 下,确保 **Project SDK** 设置为 Java 1.8。 - **预期结果**:注册后,项目创建向导应能显示 Java 1.8 选项。如果问题仍存在,继续下一步[^2]。 #### 步骤 2: 检查并启用 Spring Boot 插件 - **为什么重要**:Spring Initializr 功能依赖插件支持。插件未启用或过时可能导致 Java 版本选项缺失(引用[2]提到插件缺失是常见原因)。 - **操作步骤**: 1. 在 IDEA 中,进入菜单:**File** > **Settings**(或 `Ctrl+Alt+S`)。 2. 导航到 **Plugins**。 3. 在搜索框中输入 "Spring Boot": - 确保 **Spring Boot** 插件已安装且启用(勾选框为选中状态)。 - 如果未安装,点击 **Marketplace** 标签页 > 搜索 "Spring Boot" > **Install** > 重启 IDEA。 4. 检查其他相关插件:如 **Spring Assistant** 或 **Java EE** 插件也应启用。 5. 重启 IntelliJ IDEA。 - **预期结果**:重启后尝试创建新项目,Java 1.8 选项应出现。如果仍然缺失,可能是 Spring Initializr 兼容性问题[^2][^3]。 #### 步骤 3: 尝试手动创建或使用 Spring Initializr 替代方案 - **为什么重要**:IDEA 2019.3.3Spring Initializr 可能对新 Java 版本支持不完善。手动创建可绕过向导限制(参考引用[3]中手动修改项目的思路)。 - **操作步骤**: - **方案 A:使用 Spring Initializr 网站**: 1. 访问 [start.spring.io](https://start.spring.io/)。 2. 在网页中选择: - **Project**: Maven 或 Gradle - **Language**: Java - **Spring Boot Version**: 选择一个兼容 Java 1.8 的版本(如 2.x 系列,避免 3.x 可能仅支持 Java 17+)。 - **Java Version**: 选择 81.83. 配置其他选项后,点击 **Generate** 下载项目 Zip。 4. 在 IDEA 中:**File** > **New** > **Project from Existing Sources** > 选择下载的 Zip 导入即可。 - **方案 B:手动创建普通项目后添加配置**: 1. 在 IDEA 中:**File** > **New** > **Project**。 2. 选择 **Java** > **Next**,在 **JDK** 下拉菜单中选择 Java 1.8 > **Finish**。 3. 手动添加 Spring Boot 依赖:打开 `pom.xml`(Maven)或 `build.gradle`(Gradle),添加以下依赖: ```xml <!-- pom.xml 示例 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.18</version> <!-- 选择兼容 Java 1.8 的版本 --> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> ``` 4. 创建一个主类:如 `src/main/java/com/example/demo/DemoApplication.java`: ```java package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 5. 运行项目验证:右键点击主类 > **Run**。 - **预期结果**:项目应成功编译运行在 Java 1.8 上[^3]。 #### 步骤 4: 其他故障排除建议 - **检查 IDEA 版本兼容性**:IntelliJ IDEA 2019.3.3 较旧,可能不支持最新 Spring Boot 版本。建议: - 使用 Spring Boot 2.x(如 2.7.18),而非 3.x,因为后者可能要求 Java 17+。 - 升级 IDEA 到较新版本(如 2021+),参考引用[2]中升级后的问题解决思路。 - **验证 JDK 安装**:确保系统已安装 Java 1.8: - 命令行运行 `java -version` 检查输出是否包含 "1.8"。 - 如果未安装,从 [Oracle JDK 8](https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html) 或 [OpenJDK 8](https://adoptium.net/temurin/releases/?version=8) 下载。 - **清除缓存**:IDEA 缓存冲突可能导致问题。执行:**File** > **Invalidate Caches / Restart** > **Invalidate and Restart**。 #### 总结 通过以上步骤,您应能成功在 IntelliJ IDEA 2019.3.3 中创建 Spring Boot 项目并选择 Java 1.8。关键点包括确保 JDK 注册正确、插件启用,以及必要时手动配置项目(引用[3]中的手动修改方法)。如果问题持续,考虑升级 IDEA 或使用在线 Spring Initializr 工具[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值