相信大家都碰見過maven配置的依賴或者是jar包或者是工程,在開發的過程當中,我們當然需要引入的是工程,這樣查看maven依賴的文件的時候,就能直接查看到源碼。
一、本地工程依賴
舉個例子,其架構如下所示(以下均使用eclipse中m2eclipse插件進行演示)——
此時,這里依賴的“dependency-to-hello”指代的是eclipse工作空間中的工程,這樣,我們直接源碼依賴的便是工作空間里的源碼,這樣很方便,也是我們需要的。會注意到,所依賴的“dependency-to-hello”工程,並沒有顯示其路徑,也就是默認的工作空間的地址。
那么,什么時候maven依賴的是倉庫(本地倉庫或遠程倉庫)中的jar包呢?
二、(本地/遠程)倉庫jar包依賴
很簡單的方法之一,直接把“dependency-to-hello”工程關閉掉(close project),這樣,就得到這樣一個視圖——
會看到,此時maven依賴的正是對應“dependency-to-hello”工程的jar文件,並且,后面的路徑顯示是從maven倉庫里面取的。
三、工程依賴及倉庫依賴的轉換
OK,我們現在還原之,我們將工程“dependency-to-hello”打開,會看到對應的maven依賴又變回原來的工程依賴了。
需要說的是,當重新打開工程“dependency-to-hello”的時候,hello工程並沒有出現紅色感嘆號,也就是無須做“update dependencies”等的更新maven依賴等操作。
從這里,我們就能夠看出來——m2eclipse首先查看是否能夠從本地工程庫中得到對應的maven依賴,如何存在,則將本地工程依賴進來;如何不存在,則從本地倉庫/遠程倉庫中加載解析對應的jar包依賴。
四、版本號變更
在這兒,我假裝模擬一下版本號變更,來看一下,會發生什么情況?
現在“dependency-to-hello”工程是“快照”版本,當我們將之換為正式版本的時候,發現“hello”工程的maven依賴重新變回了jar依賴,如下——
“dependency-to-hello”工程的maven坐標配置——
<groupId>com.juvenxu.mvnbook</groupId> <artifactId>dependency-to-hello</artifactId> <version>0.0.1</version> <packaging>jar</packaging>
“hello”工程的依賴配置——
<dependency> <groupId>com.juvenxu.mvnbook</groupId> <artifactId>dependency-to-hello</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
其文件架構會顯示如下——
會發現其依賴是原有的倉庫中的“快照”版本的“dependency-to-hello”的jar包。我們將倉庫中的“快照”版本刪除掉。刷新工程,發現hello工程上顯示紅色感嘆號。如下——
也就是說,其依賴是空依賴,本地及倉庫中均不存在。
當然這個“陷阱”是我自己加的,重新更改其版本號正確對應即可,就可以重新得到maven本地工程依賴了。
五、總結
在日常多人協作開發過程中,我們常常會遇到maven依賴版本變更帶來的問題。當我們的工作空間也存在對應的依賴工程(對應上述例子中的“dependency-to-hello”工程)的時候,我們可以通過判斷依賴的是本地工程還是倉庫jar包的方式來判斷是否出現了版本不一致的問題。從而,就能夠解決maven依賴版本變更帶來的問題。