1. 程式人生 > 其它 >關於開發中的版本問題的一點小建議

關於開發中的版本問題的一點小建議


關於開發中的版本問題的一點小建議

■ 本文是以springboot專案開發中遇到的問題為例:


1、背景:

學習springboot 視訊的時候,我選的一個視訊時叩丁狼的藍老師的視訊,理由:老師的聲音非常溫柔,nice~

視訊的拍攝時間是2017年的,那年流行的(視訊老師的springboot版本) 是版本1.5.7.RELEASE,而現在,是2022年,springboot都出版本3了,

但是我又喜歡聽老師的聲音,於是我自個使用的是版本2.6.5的,然後問題來了:



2、需求:springboot 整合 德魯伊連線池、整合mybatis

(1)需求1:springboot 整合 德魯伊連線池【沒問題】:

  • pom檔案中,使用的德魯伊版本:1.1.17;資料庫連線驅動的版本是父專案統一管理的版本;jdbc的版本也是父專案統一管理的版本
  • 執行結果:成功,即springboot 整合 Druid 成功

(2)需求2:springboot 整合 mybatis【問題來了】:

  • pom檔案中,使用的mybatis集合springboot的版本是最新的 2.2.2,報錯:
■ 報錯資訊:
java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation.MapperScan.factoryBean()
......

■ 解決方案:無解,內網、外網,把能搜的地方全搜了,只找到兩個說法。
說法1:把mybatis-spring整合的jar包匯入問題便解決,~but,我明明一大早就匯入了。
說法2:版本問題,emmm,於是,我就在maven倉庫試了兩三個最新版本之後,網搜,看到一個版本就試試,結果,快emo了,還是報同一個錯誤。

3、我開始了自我摸索解決bug之路

(1)首先排除自己的程式碼出錯的情況:

​ 我決定,減低springboot專案的版本跟視訊一致,為1.5.7.RELEASE,同時更改Druid和mybatis-springboot整合的版本,同一保持跟視訊一致。其中Druid的版本為:1.1.4;而mybatis-spring的版本為:1.3.0。

  • 驗證:成功通過,證明程式碼是沒有問題的

☺ 補充一個小知識:

當idea中maven專案報錯的時候,看一眼idea底部是不是有進度條,進度條的狀態是正在下載。有下載的進度條,解決錯誤的方式就是等待。沒有則需手動搜尋解決bug。

★ 可能剛建立完springboot 專案,maven會爆紅;

★ 可能在pom檔案中匯入新的依賴時,maven會爆紅;

★ 可能是在pom檔案中更改整個springboot的版本時,maven會爆紅;

✿ 解決:先看看底部有無下載進度條,有著等進度條下載完成即可,沒有則嘗試重新整理一下maven專案。


(2)嘗試再把springboot專案版本替換為2.6.5:

  • 結果:報錯
//報druid的錯誤:
java.lang.IllegalStateException: Failed to introspect Class [com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure] from ClassLoader 
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvider

■ 解決:更換druid 版本:

  • 嘗試更換德魯伊版本為最新版本-1.2.8

  • 結果:問題解決了哈哈哈



4、關於此次版本烏龍的小心得

  • 小建議:時間比較趕,看專案視訊學習完,需要立馬去趕專案,建議:視訊版本挑比較新的,然後版本跟視訊一致即可。

  • 小心得:關於版本問題的解決思路:依賴的版本的替換專案的版本也可替換

    ■ 這個版本問題產生情況:

    • 依賴之間的版本衝突、專案和依賴之間的版本衝突。

    ■ 關鍵:如何解決版本問題:

    • 前提是先驗證自己的程式碼沒有問題(上文提供了一種驗證方法)

    • 看報錯資訊:控制檯的報錯(控制檯沒有報錯資訊,找找日誌檔案),去搜解決方案

      • idea中快速開啟日誌檔案:
  • 我常搜解決方案的地方:

    ① 直接百度搜;② csdn(看一兩個即可,基本解決方案都擂臺,不用再浪費時間了) ③ 部落格園 ④ 知乎

    ④ 外網-Stack Overflow(這個網站非常nice~,國外最大的問答平臺)

  • 搜尋之後的解決方案,沒能解決,此時---需要冷靜下來,自己一步一步分析:

    • 報錯之前,幹了什麼----思路是倒序著去排除錯誤,最後乾的嫌疑最大,從後往前排除



★ 我本次問題的解決真實情況:

是通過減低版本和視訊老師一致的時候,在排除程式碼本身問題之後,把版本替換為原先自己想要的版本,通過控制檯的報錯提示,成功解決了問題哈哈哈。

☺ 真實情況:【本次專案真實bug來自專案版本

  • 我驗證完成之後,我需要替換專案為原來版本的時候,版本是2.6.5, 我懶得複製貼上,手打輸入成2.5.6,然後通過控制檯的提示,就成功解決了,

    替換成2.6.5版本,就又可以讓人emo啦!



■ 倒序排錯思路:

① 首先驗證排除掉是自己的程式碼本身的問題,讓問題鎖定到pom檔案中的依賴上

② 我的需求是springboot 整合 德魯伊連線池、整合mybatis,在pom.xml 最後引入的依賴是mybatis-springboot,執行報錯,網搜解決方案---提示引入mybatis-springboot的依賴和該依賴的版本【非該問題,問題依舊存在

③ 倒序---springboot 整合 德魯伊連線池,自己引入的依賴中含有版本的是Druid,更換Druid版本


★ 建議更換依賴的版本的參考標準:

  • maven 顯示的 Compile Dependencies 和 Provided Dependencies,版本之間的參考;

  • 因為是springboot 專案,考慮一下springboot官網給的依賴之間參考

  • 若是前面都無法提供參考,建議從maven提供的最新依賴開始嘗試更換



如果本文對你有幫助的話記得給一樂點個贊哦,感謝!