【Java】项目全面升级转化经验

在这里插入图片描述

这段时间有个艰巨的任务,把早期项目改造为新版本架构,涉及到JDK版本、Spring boot版本以及依赖管理架构改造。

需求

  • 将依赖管理从Gradle 转换为 Maven

  • 将 JDK 1.8 版本升级到 17

  • 将Spring Boot 2.7.13升级到 3.5.0

计划

为了更顺畅的完成以上改造,大体做了以下计划:

步骤内容
1Gradle 转换为 Maven 构建
2升级 JDK1.8 版本到 17
3升级 Spring Boot 2.7.13到 3.5.0
4源码兼容性调整
5测试和验证

前置准备

  1. 确保项目可以正常构建并运行
  2. 确保项目依赖完整并已去除无用依赖
  3. 确认好项目的依赖各类版本

一、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.打包测试

打包进行测试环境测试,以确保升级后功能可正常跑通

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值