自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開發(fā) 前端
雖然范圍版本提供了尋找需要的庫(kù)的新版本的方便,但大范圍的未定版本和更新可能會(huì)引入不希望的結(jié)果,這些結(jié)果可能導(dǎo)致編譯異?;蛘哌\(yùn)行時(shí)錯(cuò)誤。我們需要使用正確的方法來(lái)管理和鎖定我們的依賴,避免這些困擾,并保持我們的項(xiàng)目的穩(wěn)定性。

Apache Maven 是一個(gè)自動(dòng)化構(gòu)建工具,廣泛應(yīng)用于 Java 項(xiàng)目,它可以幫助我們管理項(xiàng)目的構(gòu)建、報(bào)告和文檔,但最重要的功能之一是依賴管理。

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

這樣的寫法意味著依賴的版本要大于等于 2.3.0,但不指定最大版本,maven 在編譯的時(shí)候會(huì)自動(dòng)去查詢當(dāng)前最新的版本,這就很大程度上可能會(huì)引入了最新的版本,導(dǎo)致項(xiàng)目依賴不固定,從而引發(fā)編譯異常。

Maven 版本范圍介紹

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

圖片圖片

版本范圍帶來(lái)的問題

對(duì)于某些類型的項(xiàng)目,如開源項(xiàng)目,使用范圍可能是合理的,因?yàn)殚_源項(xiàng)目通常希望能夠方便地采用最新的庫(kù)和工具。

然而,對(duì)于需要保證穩(wěn)定性的商業(yè)項(xiàng)目,使用無(wú)上限的版本范圍可能導(dǎo)致問題。每次構(gòu)建項(xiàng)目時(shí),Maven 都會(huì)嘗試獲取新的依賴版本。如果新版本引入了不兼容的更改,可能導(dǎo)致編譯錯(cuò)誤,甚至更微妙的運(yùn)行時(shí)錯(cuò)誤。

由于同一項(xiàng)目的不同開發(fā)者可能在不同的時(shí)間點(diǎn)執(zhí)行編譯,他們可能獲得的依賴版本不同,從而導(dǎo)致難以追蹤的問題。

而作為公司內(nèi)部的軟件,很多時(shí)候我們是需要保證穩(wěn)定的,所以就很不適合采用范圍來(lái)配置 maven 版本了。

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

圖片圖片

如果此時(shí)我把 fastjson 的版本調(diào)整成 [1.2.79,) 的形式,則右側(cè)的依賴就會(huì)變成一個(gè)最新的 2.0.45 這個(gè)版本。

圖片圖片

image-20240107150146630這種寫法除了依賴中會(huì)獲取到最新的版本之外,其實(shí) maven 是把整個(gè)范圍的 jar 都下載下來(lái)了,通過本地的資源倉(cāng)庫(kù)我們可以看到只要版本在這個(gè)范圍之內(nèi),都會(huì)被下載下來(lái)。

圖片圖片

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

特別是隨著 JDK 版本的升級(jí),很多新的依賴的開發(fā)和編譯可能是采用新版本的 JDK 來(lái)實(shí)現(xiàn)的,這個(gè)時(shí)候如果我們自身項(xiàng)目的 JDK 還是舊版本的話,就會(huì)出現(xiàn)項(xiàng)目編譯不通過的問題了,會(huì)提示 JDK 版本不對(duì),這種在編譯的時(shí)候往往會(huì)出現(xiàn) Java – Unsupported class file major version  異常。

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

如何解決明確版本問題

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

這樣,所有開發(fā)者和構(gòu)建服務(wù)器都將使用相同的依賴版本。當(dāng)我們決定升級(jí)依賴時(shí),可以測(cè)試新版本,對(duì)代碼進(jìn)行必要的更改,然后在進(jìn)行升級(jí)。

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

結(jié)論

雖然范圍版本提供了尋找需要的庫(kù)的新版本的方便,但大范圍的未定版本和更新可能會(huì)引入不希望的結(jié)果,這些結(jié)果可能導(dǎo)致編譯異?;蛘哌\(yùn)行時(shí)錯(cuò)誤。

我們需要使用正確的方法來(lái)管理和鎖定我們的依賴,避免這些困擾,并保持我們的項(xiàng)目的穩(wěn)定性。

責(zé)任編輯:武曉燕 來(lái)源: Java極客技術(shù)
相關(guān)推薦

2018-05-10 11:50:13

Docker容器冷知識(shí)

2021-08-30 07:49:33

索引ICP Mysql

2018-01-18 11:59:59

數(shù)據(jù)庫(kù)MySQL

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2011-09-15 17:10:41

2022-10-13 11:48:37

Web共享機(jī)制操作系統(tǒng)

2009-12-10 09:37:43

2021-02-01 23:23:39

FiddlerCharlesWeb

2010-08-23 09:56:09

Java性能監(jiān)控

2023-03-26 08:15:04

代碼配置Spring

2023-03-20 07:32:26

配置代碼Spring

2019-12-24 09:49:02

微軟英語(yǔ)瀏覽器

2022-01-24 16:42:48

bpftraceLinux工具

2022-01-17 22:33:37

Java特定類型

2020-09-15 08:35:57

TypeScript JavaScript類型

2022-11-04 08:19:18

gRPC框架項(xiàng)目

2023-04-09 23:37:31

JavaScript開發(fā)

2021-12-29 11:38:59

JS前端沙箱

2021-12-22 09:08:39

JSON.stringJavaScript字符串
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)