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

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

这段时间有个艰巨的任务,把早期项目改造为新版本架构,涉及到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.打包测试

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

总结

到此这篇关于Java项目全面升级转化经验的文章就介绍到这了,更多相关Java项目全面升级内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • spring使用RedisTemplate操作Redis数据库

    spring使用RedisTemplate操作Redis数据库

    这篇文章主要介绍了spring使用RedisTemplate操作Redis数据库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Spring实战之使用c:命名空间简化配置操作示例

    Spring实战之使用c:命名空间简化配置操作示例

    这篇文章主要介绍了Spring实战之使用c:命名空间简化配置操作,结合实例形式详细分析了Spring使用c:命名空间简化配置的相关接口与配置操作技巧,需要的朋友可以参考下
    2019-12-12
  • Springboot整合AOP和redis的示例详解

    Springboot整合AOP和redis的示例详解

    本文主要介绍了Springboot整合AOP和Redis的详细过程,包括AOP的依赖引入和默认配置属性,日志切面格式以及Redis的自动配置和连接池使用,总结了在多线程环境下,选择合适的连接方式和客户端是非常重要,感兴趣的朋友一起看看吧
    2024-11-11
  • SpringBoot+Vue 前后端接口交互的项目实践

    SpringBoot+Vue 前后端接口交互的项目实践

    Spring Boot和Vue可以实现高效、安全的前后端接口交互,实际开发中应根据项目需求选择合适的传参方式、安全策略和性能优化方案,具有一定的感兴趣的可以了解一下
    2025-07-07
  • Spring Boot管理用户数据的操作步骤

    Spring Boot管理用户数据的操作步骤

    SpringBoot结合Thymeleaf模板引擎,可以快速搭建Web应用,介绍了使用SpringBoot处理JSON数据的基本过程,包括创建实体类、视图页面和控制器,通过这些步骤,即可完成基于SpringBoot和Thymeleaf的简单Web开发,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • MyBatis自定义映射关系和关联查询实现方法详解

    MyBatis自定义映射关系和关联查询实现方法详解

    这篇文章主要介绍了MyBatis自定义映射关系和关联查询实现方法,当POJO属性名与数据库列名不一致时,需要自定义实体类和结果集的映射关系,在MyBatis注解开发中,使用@Results定义并使用自定义映射,使用 @ResultMap使用自定义映射
    2023-04-04
  • Java实现AC自动机全文检索示例

    Java实现AC自动机全文检索示例

    本篇文章主要介绍了Java实现AC自动机全文检索示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • 解决idea不显示Services工具栏的问题

    解决idea不显示Services工具栏的问题

    这篇文章主要介绍了解决idea不显示Services工具栏的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Spring Boot + EasyExcel + SqlServer 进行批量处理数据的高效方法

    Spring Boot + EasyExcel + SqlServer 进行批量处理数据的高效方法

    在日常开发和工作中,我们可能要根据用户上传的文件做一系列的处理,本篇文章就以Excel表格文件为例,主要介绍了Spring Boot + EasyExcel + SqlServer 进行批量处理数据的高效方法,需要的朋友可以参考下
    2024-06-06
  • 简单易用的Spring Boot邮件发送demo

    简单易用的Spring Boot邮件发送demo

    本文将介绍如何使用Spring Boot发送邮件,我们将演示如何配置SMTP邮件服务器,创建一个邮件模板,以及如何使用JavaMailSender发送邮件,我们还将介绍如何测试我们的邮件发送代码
    2023-12-12

最新评论