成人免费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

2022-10-13 11:48:37

Web共享機制操作系統

2009-12-10 09:37:43

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命令使用技巧

2012-11-23 10:57:44

Shell

2021-12-29 11:38:59

JS前端沙箱

2021-12-22 09:08:39

JSON.stringJavaScript字符串

2015-06-19 13:54:49

2022-01-24 16:42:48

bpftraceLinux工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美 中文字幕 | 国产日韩免费视频 | 黄色免费在线网址 | 一级黄色影片在线观看 | 日韩免费av网站 | 91一区二区 | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 精品国产一区二区三区日日嗨 | 精品欧美乱码久久久久久 | 久久精品国产一区二区电影 | 久久精品亚洲精品国产欧美 | 日韩一区精品 | 精品国产第一区二区三区 | 亚洲精品在线观看网站 | 成人精品区 | 免费一级黄 | 日日操操 | 欧美激情第一区 | 日韩视频区 | 一级黄色片在线看 | 欧美综合国产精品久久丁香 | 亚洲免费一区 | 古典武侠第一页久久777 | 狠狠伊人| 91精品国产一区二区三区 | 国产精品美女一区二区 | 日韩国产欧美一区 | 久久久久香蕉视频 | 精品在线一区二区 | 91大神在线资源观看无广告 | 日本亚洲一区 | 国产精品日韩一区二区 | 久久精品国产一区老色匹 | 97在线观视频免费观看 | 在线观看视频一区 | 久久91精品国产 | av黄色免费在线观看 | 日韩成人精品视频 | 欧美一二三四成人免费视频 | 91福利影院 | 国产精品久久久久久久免费大片 |