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