1. 程式人生 > >【Maven】Maven的SNAPSHORT版本與依賴更新

【Maven】Maven的SNAPSHORT版本與依賴更新

1、問題描述

今天在用Intellij Idea寫程式碼的時候,遇到一個問題,大概形容一下:
分別有兩個Java工程,TestA、TestB均使用maven構建,TestB依賴TestA,即在TestB的pom檔案中,寫出了對TestA的依賴,如下:

<!--TestA-->
<dependency>
  <groupId>whu.lc</groupId>
  <artifactId>lc</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency
>

在TestA的專案中,依賴了Gson的包,並在程式碼中使用了Gson,在TestB中呼叫也一切沒有問題。而當在TestA中引入了對jsonlib的依賴,並且修改了TestA程式碼使用JSONObjetc類之後,重新install TestA,再次構建TestB並執行,報錯如下:

這裡寫圖片描述
即,在TestB中並沒有找到對jsonlib的依賴,可是依賴明明寫在了TestA的pom中,並且Gson的依賴都可以找到,那麼為什麼對jsonlib的依賴會找不到相應的類呢。

2、解決辦法

其實解決辦法很簡單,maven reimport一下就好了。道理也很簡單:
(1)一般在專案釋出之前,程式碼改動會很多,我們依賴的很多其他庫的改動也會很多,因此一般在開發過程中,maven在構建時,都會構建SNAPSHORT快照版本,即verison值以“SNAPSHPORT”結尾,這有什麼好處呢?這使得,java在構建程式碼時,都會首先(可以配置)去遠端倉庫檢視依賴是否更新,如果更新則直接下載遠端倉庫的程式碼並且使用。這也就是為什麼,我們重新 install TestA之後,對TestB沒有做任何mvn操作,而只是用IDE重新構建,就可以引用到TestA的最新程式碼。
(2)但是,由於沒有進行任何mvn操作,所以TestA重新加入的依賴,TestB無法引用到。因此重新reimport載入依賴一下就好。