Java項目全面升級轉(zhuǎn)化經(jīng)驗(涉及JDK、Spring?boot版本及依賴管理架構(gòu))

這段時間有個艱巨的任務(wù),把早期項目改造為新版本架構(gòu),涉及到JDK版本、Spring boot版本以及依賴管理架構(gòu)改造。
需求
將依賴管理從Gradle 轉(zhuǎn)換為 Maven
將 JDK 1.8 版本升級到 17
將Spring Boot 2.7.13升級到 3.5.0
計劃
為了更順暢的完成以上改造,大體做了以下計劃:
| 步驟 | 內(nèi)容 |
|---|---|
| 1 | Gradle 轉(zhuǎn)換為 Maven 構(gòu)建 |
| 2 | 升級 JDK1.8 版本到 17 |
| 3 | 升級 Spring Boot 2.7.13到 3.5.0 |
| 4 | 源碼兼容性調(diào)整 |
| 5 | 測試和驗證 |
前置準備
- 確保項目可以正常構(gòu)建并運行
- 確保項目依賴完整并已去除無用依賴
- 確認好項目的依賴各類版本
一、Gradle 轉(zhuǎn)換為 Maven
依賴管理作為第一步,因為相比之下改動最小,基本不牽扯代碼修改。同時,最開始切換Maven,也為之后升級過程中可能存在的依賴版本修改做準備。
1.pom轉(zhuǎn)化
- 打開 IDEA,右鍵項目根目錄 → Add Framework Support → 勾選 Maven。
- IDEA 會生成 pom.xml 文件。
- 手動遷移 build.gradle 中的依賴、插件信息。
如果使用社區(qū)版Idea:
手動創(chuàng)建pom并逐一將所有build.gradle轉(zhuǎn)化為pom.xml。
2.移除所有g(shù)radle相關(guān)文件
- build.gradle / build.gradle.kts
- settings.gradle
- .gradle/
- gradlew、gradlew.bat
3.移除.idea目錄并重啟idea
4.關(guān)鍵步驟
在idea中右鍵根目錄pom.xml文件選擇“添加項目為maven”。
注意:
由于maven與gradle的很多寫法不同,在實際加載依賴時會提示各種錯誤,一般需要額外注意,對指定目錄依賴的引用,并注意對Lombok的編譯時排除的設(shè)定。
指定目錄依賴的引用
例如:
<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版本變化帶來的語法區(qū)別
一些寫法上的改變,如:
- 一些廢棄的寫法
- 一些var類型的聲明
- 依賴版本的變化
需要按需調(diào)整,不再累述。
三、Spring boot升級
相比SDK版本變化,Spring boot的升級帶來的代碼修改是最大的。
1.解決版本依賴問題
注意:版本的取舍很重要,哪些需要升級,哪些需要保留低版本,需要根據(jù)項目情況判斷,一般以spring boot為核心的組件都應(yīng)該做升級
2.解決新版本寫法
例如:
javax.xml.bind → jakarta.xml.bind
3.解決缺失依賴問題
升級后,一些原有的依賴可能會被舍棄,需要手動加上,如:zip4j 2.x 版本中,包結(jié)構(gòu)已完全重構(gòu),net.lingala.zip4j.core.* 目錄被移除。如果你升級了 zip4j 到 2.x,就找不到這個類。
四、代碼兼容性調(diào)整
遷移過程中出現(xiàn)的報錯和異常:
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.已經(jīng)被棄用的CommonsMultipartFile
import org.springframework.web.multipart.commons.CommonsMultipartFile;
改為:
import org.springframework.web.multipart.MultipartFile;
4.已經(jīng)棄用的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字段相關(guān)修改
@TableField(strategy = FieldStrategy.IGNORED)
改為:
@TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
五、測試與驗證
1.逐一build每個項目
務(wù)必使用maven重新導(dǎo)入所有依賴,并重新進行build操作,如果這個過程無誤,則證明本次升級成功,如有問題,按需解決
2.依賴關(guān)系確認
還需確認轉(zhuǎn)化后的項目的樹狀結(jié)構(gòu)是否與之前一致,即父子關(guān)系不能變
3.運行項目
運行項目進行開發(fā)環(huán)境測試,確保模塊正常
4.打包測試
打包進行測試環(huán)境測試,以確保升級后功能可正常跑通
總結(jié)
到此這篇關(guān)于Java項目全面升級轉(zhuǎn)化經(jīng)驗的文章就介紹到這了,更多相關(guān)Java項目全面升級內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring使用RedisTemplate操作Redis數(shù)據(jù)庫
這篇文章主要介紹了spring使用RedisTemplate操作Redis數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Spring實戰(zhàn)之使用c:命名空間簡化配置操作示例
這篇文章主要介紹了Spring實戰(zhàn)之使用c:命名空間簡化配置操作,結(jié)合實例形式詳細分析了Spring使用c:命名空間簡化配置的相關(guān)接口與配置操作技巧,需要的朋友可以參考下2019-12-12
Spring Boot管理用戶數(shù)據(jù)的操作步驟
SpringBoot結(jié)合Thymeleaf模板引擎,可以快速搭建Web應(yīng)用,介紹了使用SpringBoot處理JSON數(shù)據(jù)的基本過程,包括創(chuàng)建實體類、視圖頁面和控制器,通過這些步驟,即可完成基于SpringBoot和Thymeleaf的簡單Web開發(fā),感興趣的朋友跟隨小編一起看看吧2024-09-09
MyBatis自定義映射關(guān)系和關(guān)聯(lián)查詢實現(xiàn)方法詳解
這篇文章主要介紹了MyBatis自定義映射關(guān)系和關(guān)聯(lián)查詢實現(xiàn)方法,當POJO屬性名與數(shù)據(jù)庫列名不一致時,需要自定義實體類和結(jié)果集的映射關(guān)系,在MyBatis注解開發(fā)中,使用@Results定義并使用自定義映射,使用 @ResultMap使用自定義映射2023-04-04
Spring?Boot?+?EasyExcel?+?SqlServer?進行批量處理數(shù)據(jù)的高效方法
在日常開發(fā)和工作中,我們可能要根據(jù)用戶上傳的文件做一系列的處理,本篇文章就以Excel表格文件為例,主要介紹了Spring?Boot?+?EasyExcel?+?SqlServer?進行批量處理數(shù)據(jù)的高效方法,需要的朋友可以參考下2024-06-06

