Java项目全面升级转化经验(涉及JDK、Spring boot版本及依赖管理架构)
作者:Hi-Jimmy
这段时间有个艰巨的任务,把早期项目改造为新版本架构,涉及到JDK版本、Spring boot版本以及依赖管理架构改造。
需求
将依赖管理从Gradle 转换为 Maven
将 JDK 1.8 版本升级到 17
将Spring Boot 2.7.13升级到 3.5.0
计划
为了更顺畅的完成以上改造,大体做了以下计划:
步骤 | 内容 |
---|---|
1 | Gradle 转换为 Maven 构建 |
2 | 升级 JDK1.8 版本到 17 |
3 | 升级 Spring Boot 2.7.13到 3.5.0 |
4 | 源码兼容性调整 |
5 | 测试和验证 |
前置准备
- 确保项目可以正常构建并运行
- 确保项目依赖完整并已去除无用依赖
- 确认好项目的依赖各类版本
一、Gradle 转换为 Maven
依赖管理作为第一步,因为相比之下改动最小,基本不牵扯代码修改。同时,最开始切换Maven,也为之后升级过程中可能存在的依赖版本修改做准备。
1.pom转化
- 打开 IDEA,右键项目根目录 → Add Framework Support → 勾选 Maven。
- IDEA 会生成 pom.xml 文件。
- 手动迁移 build.gradle 中的依赖、插件信息。
如果使用社区版Idea:
手动创建pom并逐一将所有build.gradle转化为pom.xml。
2.移除所有gradle相关文件
- build.gradle / build.gradle.kts
- settings.gradle
- .gradle/
- gradlew、gradlew.bat
3.移除.idea目录并重启idea
4.关键步骤
在idea中右键根目录pom.xml文件选择“添加项目为maven”。
注意:
由于maven与gradle的很多写法不同,在实际加载依赖时会提示各种错误,一般需要额外注意,对指定目录依赖的引用,并注意对Lombok的编译时排除的设定。
指定目录依赖的引用
例如:
<dependency> <groupId>com.local</groupId> <artifactId>opencv</artifactId> <version>453</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/lib/opencv/opencv-453.jar</systemPath> </dependency>
Lombok的编译时排除
例如:
<build> <plugins> <!-- 编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build>
二、升级JDK
1.修改项目SDK版本
2.修改平台SDK版本
3.修改JDK版本变化带来的语法区别
一些写法上的改变,如:
- 一些废弃的写法
- 一些var类型的声明
- 依赖版本的变化
需要按需调整,不再累述。
三、Spring boot升级
相比SDK版本变化,Spring boot的升级带来的代码修改是最大的。
1.解决版本依赖问题
注意:版本的取舍很重要,哪些需要升级,哪些需要保留低版本,需要根据项目情况判断,一般以spring boot为核心的组件都应该做升级
2.解决新版本写法
例如:
javax.xml.bind → jakarta.xml.bind
3.解决缺失依赖问题
升级后,一些原有的依赖可能会被舍弃,需要手动加上,如:zip4j 2.x
版本中,包结构已完全重构,net.lingala.zip4j.core.*
目录被移除。如果你升级了 zip4j 到 2.x,就找不到这个类。
四、代码兼容性调整
迁移过程中出现的报错和异常:
1.xml报错
自 JDK 9 开始,javax.xml.bind 所在的 JAXB(Java Architecture for XML Binding)模块被移出 JDK 默认类库,在 JDK 11 及更高版本中已彻底移除。
import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller;
改为:
import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.Marshaller;
2.升级mybitasPlus后,分页报错
page.setDesc()//不存在该方法 page.setAsc() //不存在
改为:
page.addOrder(OrderItem.desc(...)) page.addOrder(OrderItem.asc(...))
3.已经被弃用的CommonsMultipartFile
import org.springframework.web.multipart.commons.CommonsMultipartFile;
改为:
import org.springframework.web.multipart.MultipartFile;
4.已经弃用的Base64Utils
import org.springframework.util.Base64Utils; byte[] bytes = Base64Utils.decodeFromString(pptImage);//解码
改为:
import java.util.Base64; byte[] bytes = Base64.getDecoder().decode(pptImage);//解码
5.javax→jakarta
大部分隶属javax的类库都改为jakarta,如::
import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint;
改为:
import jakarta.websocket.*; import jakarta.websocket.server.PathParam; import jakarta.websocket.server.ServerEndpoint;
6.mybatis字段相关修改
@TableField(strategy = FieldStrategy.IGNORED)
改为:
@TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
五、测试与验证
1.逐一build每个项目
务必使用maven重新导入所有依赖,并重新进行build操作,如果这个过程无误,则证明本次升级成功,如有问题,按需解决
2.依赖关系确认
还需确认转化后的项目的树状结构是否与之前一致,即父子关系不能变
3.运行项目
运行项目进行开发环境测试,确保模块正常
4.打包测试
打包进行测试环境测试,以确保升级后功能可正常跑通
总结
到此这篇关于Java项目全面升级转化经验的文章就介绍到这了,更多相关Java项目全面升级内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!