提綱
1、生成lastUpdate意味着什么
2、應該如何處理lastUpdate
1、生成lastUpdate意味着什么
========================
從idea的maven tool window中看到有的module的dependency是紅的,說明idea中的maven插件找不到這個dependency。這時候,去到這個dependency在本地倉庫的位置,看到dependency的jar和pom都在,同時,會發現有以lastUpdate結尾的文件。
有這個文件,表示maven去遠程倉庫為dependency下載jar和pom了,但是,沒有下載下來,可能是由於網絡不好,也可能是遠程倉庫沒有這個dependency。
總之,雖然本地倉庫有dependency的jar和pom,可是maven卻不來本地直接去,偏偏要去遠程下載,下載還不成功。
2、應該如何處理lastUpdate
==========================
網上有很多人遇到了lastUpdate文件,一般的建議是刪除它。然后重新reimport項目,dependency就會不報紅。
可是,我遇到的情況是,我刪除了lastUpdate了,也reimport了,dependency還是報紅。報紅不要緊,最關鍵的是,我去dependency在本地倉庫的位置看了一下,發現lastUpdate文件又出現了。
這說明,即使你刪除了lastUpdate文件,maven還是會嘗試去網上下載dependency的jar和pom,每次都要去網上下,每次都不成功,不成功就生成lastUpdate文件。刪除了,還是會重復這個操作。
所以,關鍵不是你刪除不刪除lastUpdate,關鍵是要搞清楚為啥maven在本地明明有dependency的jar和pom的情況下,還要去網上下載而不是直接使用本地的dependency呢?按照常理,這是違背maven解析dependency的原則的,maven一般是先從本地倉庫找dependency,如果找不到才去網上的遠程倉庫下載呀?為什么會相反呢?
這個問題答案一時也沒搞清楚。
但是,對這種不去本地找的問題,我發現有一種有效的解決辦法,那就是在對應module的pom中下如下repository:
<repositories> <repository> <id>oss</id> <url>file:D:\apache-maven-3.6.3\localRepo</url> </repository> </repositories>
file后面的是本地倉庫的絕對路徑。這樣寫上以后,報紅的dependency一般就不紅了。有效地解決了找不到dependency的問題。
但是,這樣雖然解決了自己本地dependency報紅的錯誤,卻沒有從根本上分析清楚這個問題導致的原因,當然也無法根本解決,最不好的是,這樣的repo寫到pom中,代碼提交的時候,一定要把這個repo給注釋掉,否則別人pull這份代碼,看到pom中有這個的repo,他就會很困惑的,搞不清楚這是啥路徑。
這個問題還有待進一步搞明白。