1. 程式人生 > >轉:MAVEN依賴的是本地工程還是倉庫JAR包?

轉:MAVEN依賴的是本地工程還是倉庫JAR包?

便是 height 當我 pri cool 技術分享 原來 div 沒有

相信大家都碰見過 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依賴版本變更帶來的問題。

轉: http://www.cnblogs.com/jinguangguo/p/maven.html

轉:MAVEN依賴的是本地工程還是倉庫JAR包?