簡體   English   中英

maven找不到我當地的文物

[英]maven can't find my local artifacts

我似乎無法運行mvn -o package因為它抱怨

存儲庫系統處於脫機狀態,但工件com.liferay.portal:util-bridges:jar:6.1.20在本地存儲庫中不可用。

但我檢查了我的本地存儲庫,那里存在工件。 我也嘗試過將updatePolicy設置為從不在settings.xml文件中的解決方案但是無效。

在Maven 3.0.x之前,Maven沒有跟蹤本地存儲庫中文件的來源。

這可能會導致構建問題,特別是如果你正在構建一些列出(現已死)非常borked java.net2存儲庫的東西......不僅該存儲庫更改了已發布的工件(非常糟糕和邪惡的做法),而且它還發布了工件與中央的文物相同的坐標,但內容不同(令人難以置信的邪惡)

所以你可以讓構建工作(因為你有commons-io:commons-io:2.0來自中央)擦除你的本地倉庫並且構建失敗(因為你現在從java.net2獲得commons-io:commons-io:2.0是一個完全不同的工件,在pom中具有不同的依賴關系) 反之亦然。

上述情況是使用maven存儲庫管理器的驅動程序之一,因為它允許您控制下游公開的存儲庫的子集以及從多個存儲庫(通常稱為路由規則)解析工件的順序

在任何情況下,當maven切換到Aether作為存儲庫訪問層時,決定開始跟蹤工件的來源。

因此,對於Maven 3.0.x,當從存儲庫下載工件時,maven會留下_maven.repositories文件來記錄文件的解析位置。 如果您正在構建項目並且有效的存儲庫列表不包括工件從中解析的位置,那么Maven會確定它就好像工件不在緩存中,並將尋求重新解析工件。 ..

但是3.0.x中有許多錯誤...最關鍵的是如何處理offline ...即:當離線時,maven 3.0.x認為沒有存儲庫,因此總是會發現與_maven.repositories的不匹配_maven.repositories文件!!!

Maven 3.0.x的解決方法是從本地緩存中刪除這些文件,例如

$ find ~/.m2/repository -name _maven.repositories -exec rm -v {} \;

副作用是你放棄了Maven 3.0.x試圖提供的保護。

好消息是Maven 3.1將具有所需的修復(如果我們能夠共同行動並獲得釋放門)

使用Maven 3.1在脫機模式下, _maven.repositories文件被(半)忽略,並且還有一個選項可以忽略該文件用於在線構建(稱為傳統模式)

在這個時間點(2013年6月1日),第4次嘗試削減符合法律和測試要求的版本正在進行中...所以,假設第4次是幸運的,我希望看到3.1.0-alpha -1在3-4天內發布...但是它可能會更長,因為我們想要給3.1中的更改​​足夠的時間來浸泡以確保使用構建不會中斷(API暴露的變化(通過事故是什么 - 插件作者所依賴的網站和依賴插件所需的API(即使它們不應該有)所以有潛力,盡管我們認為我們已經覆蓋了所有的基礎)

希望能回答你的問題(也許還有一些你不知道你的問題;-))

我還必須以與上述_maven.repositories相同的方式刪除_remote.repositories。 我正在使用Maven 3.1.1

find ~/.m2/repository -name _remote.repositories -exec rm -v {} \;

當我使用apache-maven-3.0.4時,我遇到了這個問題,在我轉向apache-maven-3.3.1之后問題就出現了。

當我通過shell腳本安裝本地工件時,我在Ubuntu Linux中遇到了這個問題。 解決方案是刪除本地工件並“手動”再次安裝它們 - 通過終端調用mvn install:install-file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM