java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java项目全面升级

Java项目全面升级转化经验(涉及JDK、Spring boot版本及依赖管理架构)

作者:Hi-Jimmy

在软件开发领域,项目升级是一个必然的过程,随着技术的不断进步和业务需求的变化,对于旧项目的升级和优化已成为许多企业必须面对的问题,这篇文章主要介绍了Java项目全面升级转化的相关资料,包括JDK、Spring boot版本及依赖管理架构,需要的朋友可以参考下

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

需求

计划

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

步骤内容
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:
手动创建pom并逐一将所有build.gradle转化为pom.xml。

2.移除所有gradle相关文件

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版本变化带来的语法区别

一些写法上的改变,如:

三、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项目全面升级内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文