引言
截止至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。
<!-- 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个小时!这不禁让我感叹一句:
知识果然才是最昂贵的“商品”,动手容易,讲明白太难了!