成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不知道 Maven 的這個特性,你遲早要被坑

開發 前端
雖然范圍版本提供了尋找需要的庫的新版本的方便,但大范圍的未定版本和更新可能會引入不希望的結果,這些結果可能導致編譯異常或者運行時錯誤。我們需要使用正確的方法來管理和鎖定我們的依賴,避免這些困擾,并保持我們的項目的穩定性。

Apache Maven 是一個自動化構建工具,廣泛應用于 Java 項目,它可以幫助我們管理項目的構建、報告和文檔,但最重要的功能之一是依賴管理。

只要正確配置了項目的依賴,Maven 在編譯的時候就可以自動下載項目所需的所有依賴項。但是如果我們使用不當,依賴管理可能會引入問題,特別是當我們使用如 [2.3.0,)  這樣的版本范圍指定的時候。

這樣的寫法意味著依賴的版本要大于等于 2.3.0,但不指定最大版本,maven 在編譯的時候會自動去查詢當前最新的版本,這就很大程度上可能會引入了最新的版本,導致項目依賴不固定,從而引發編譯異常。

Maven 版本范圍介紹

在 Maven 的依賴管理中,我們可以為依賴項指定一個版本范圍。例如,[1.0,2.0]意味著版本范圍介于 1.0 和 2.0 之間(包含)。[1.0,2.0) 意味著版本范圍介于 1.0 和 2.0 之間,但不包含 2.0。[2.3.0,)則表明我們接受 2.3.0 或更高的版本,此時我們并沒有指定范圍的上限,而是讓 Maven 選擇滿足這個條件的最新版本。

圖片圖片

版本范圍帶來的問題

對于某些類型的項目,如開源項目,使用范圍可能是合理的,因為開源項目通常希望能夠方便地采用最新的庫和工具。

然而,對于需要保證穩定性的商業項目,使用無上限的版本范圍可能導致問題。每次構建項目時,Maven 都會嘗試獲取新的依賴版本。如果新版本引入了不兼容的更改,可能導致編譯錯誤,甚至更微妙的運行時錯誤。

由于同一項目的不同開發者可能在不同的時間點執行編譯,他們可能獲得的依賴版本不同,從而導致難以追蹤的問題。

而作為公司內部的軟件,很多時候我們是需要保證穩定的,所以就很不適合采用范圍來配置 maven 版本了。

如下所示,我這邊原本的配置 fastjson 的版本是 1.2.79,從右側的 maven 依賴中我們可以看到,項目中下載的 fastjson 的版本是 1.2.79。

圖片圖片

如果此時我把 fastjson 的版本調整成 [1.2.79,) 的形式,則右側的依賴就會變成一個最新的 2.0.45 這個版本。

圖片圖片

image-20240107150146630這種寫法除了依賴中會獲取到最新的版本之外,其實 maven 是把整個范圍的 jar 都下載下來了,通過本地的資源倉庫我們可以看到只要版本在這個范圍之內,都會被下載下來。

圖片圖片

另外如果一些軟件自身的升級是向下兼容的,那么使用范圍版本配置可能沒什么關系,但是如果一些軟件的版本不是向下兼容的,那么使用范圍版本配置那肯定是有問題的。

特別是隨著 JDK 版本的升級,很多新的依賴的開發和編譯可能是采用新版本的 JDK 來實現的,這個時候如果我們自身項目的 JDK 還是舊版本的話,就會出現項目編譯不通過的問題了,會提示 JDK 版本不對,這種在編譯的時候往往會出現 Java – Unsupported class file major version  異常。

所以下次如果出現這種異常,可以考慮看看是不是 maven 版本依賴配置問題。

如何解決明確版本問題

最簡單和最直接的方法是將依賴的版本明確指定,而不是提供一個范圍。

這樣,所有開發者和構建服務器都將使用相同的依賴版本。當我們決定升級依賴時,可以測試新版本,對代碼進行必要的更改,然后在進行升級。

Maven 也支持所謂的版本管理(version management)。在父 POM 中,我們可以用 <dependencyManagement> 元素定義一個或多個依賴項的版本,然后在項目的各個模塊中引用它們,無需在每個模塊中指定版本。這種方法對于確保項目的各個部分使用相同的依賴版本非常有效。

結論

雖然范圍版本提供了尋找需要的庫的新版本的方便,但大范圍的未定版本和更新可能會引入不希望的結果,這些結果可能導致編譯異常或者運行時錯誤。

我們需要使用正確的方法來管理和鎖定我們的依賴,避免這些困擾,并保持我們的項目的穩定性。

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2018-01-18 11:59:59

數據庫MySQL

2018-05-10 11:50:13

Docker容器冷知識

2021-08-30 07:49:33

索引ICP Mysql

2010-08-23 09:56:09

Java性能監控

2011-09-15 17:10:41

2021-02-01 23:23:39

FiddlerCharlesWeb

2009-12-10 09:37:43

2022-10-13 11:48:37

Web共享機制操作系統

2019-12-24 09:49:02

微軟英語瀏覽器

2023-03-20 07:32:26

配置代碼Spring

2023-03-26 08:15:04

代碼配置Spring

2021-10-17 13:10:56

函數TypeScript泛型

2020-08-11 11:20:49

Linux命令使用技巧

2015-06-19 13:54:49

2021-12-22 09:08:39

JSON.stringJavaScript字符串

2021-12-29 11:38:59

JS前端沙箱

2012-11-23 10:57:44

Shell

2022-01-24 16:42:48

bpftraceLinux工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天天天操 | 亚洲一区二区精品视频 | 日本精品久久久久久久 | 不卡一区二区在线观看 | 少妇特黄a一区二区三区88av | 成人精品一区 | 中文字幕在线第一页 | 亚州精品成人 | 亚洲精品中文字幕中文字幕 | 天天干.com| 日韩精品一区二区三区在线观看 | 久操伊人| 精品综合久久久 | 国产成人一区在线 | 亚洲综合精品 | 国产日韩欧美二区 | 国产在线观看免费 | 午夜精品久久久久久久99黑人 | 午夜av电影院 | 精品美女在线观看 | 国产毛片毛片 | 国产一级在线观看 | 成人免费网站 | 亚洲日韩中文字幕一区 | av性色全交蜜桃成熟时 | japanhd成人 | 国产精品高潮呻吟久久 | 成人午夜网 | 亚洲免费在线视频 | 久久久久久久久久久久久九 | 久久久久久久国产精品影院 | 国产精品视频久久久久 | 日韩视频―中文字幕 | 亚洲h视频| 在线看亚洲 | 精品国产高清一区二区三区 | www.国产.com| 国产成在线观看免费视频 | 成人亚洲性情网站www在线观看 | 国产精品久久久久久久久久久久 | 国产乱人伦 |