2012-09-20 40 views
44

偶爾maven會抱怨在本地資源庫中找不到在本地構建和打包的特定依賴項,同時構建另一個將其作爲依賴項的項目。我們得到如下錯誤:Maven未能找到本地工件

未能就項目的X執行目標:無法解析項目X的依賴關係:未能找到的Y [archiva庫]在本地存儲庫被緩存,分辨率將不會被重新嘗試,直到內部更新間隔已過或強制更新 - >

其中,X是正在構建的項目,Y是假定丟失的工件。如果您查看本地存儲庫,那麼工件就在那裏。這個工件永遠不會安裝在我們的archiva倉庫中,所以問題完全基於本地倉庫。

我們已經在settings.xml中嘗試了各種配置文件,當然還有「mvn -U」。既沒有任何好處,也不應該這樣做,因爲這個工件永遠不會超過本地存儲庫。

似乎工作的唯一兩件事情是等待很長時間,直到maven smartens或完全刪除本地存儲庫。推測等待選項與上述更新間隔有關。

我們已經經歷了maven 3.0.2和3.0.3的這個問題。我們使用Archiva 1.0.3(但這不應該是一個因素)。任何幫助將不勝感激。

+1

是Maven的任何記錄,同時或之前只是「等待?」即它是否嘗試連接到無法訪問的存儲庫?此外,有問題的文物「-SNAPSHOT」? – noahlz

+0

Maven不會記錄除上面提到的錯誤之外的其他任何內容。是的,這是一個快照依賴。 – user1686620

+0

查看http://stackoverflow.com/questions/1348603/how-can-i-get-maven-to-stop-attempting-to-check-for-updates-for-artifacts-from-a – noahlz

回答

5

當這發生在我身上時,這是因爲我盲目地從模板中複製了我的settings.xml文件,它仍然有空白的<localRepository/>元素。這意味着在解析依賴關係時沒有使用本地資源庫(儘管您的已安裝工件仍然被放置在默認位置)。當我用<localRepository>${user.home}\.m2\repository</localRepository>代替它時,它開始工作。

對於* nix,那應該是<localRepository>${user.home}/.m2/repository</localRepository>,我想。

+4

$ {user.home} \。m2 \ repository是默認值,因此刪除空標記應該可以工作。 –

30

本地Maven回購跟蹤工件最初來自哪裏使用工件目錄中名爲「_maven.repositories」的文件。刪除它後,構建工作。 This answer解決了我的問題。

+0

爲我工作,謝謝! – janhink

+6

對我來說這是一個名爲「_remote.repositories」的文件。我刪除它,它的工作!謝謝你的竅門! – perbellinio

+0

Thx名爲_remote.repositories的文件也存在。它發生在我身上時,我們的聯繫停止有網絡連接,所以它無法獲得依賴 – cabaji99

5

Maven記得什麼時候沒有找到。關鍵是「在內部更新間隔結束或更新被強制之前不會重新解析分辨率 - >」

快速解決方案是刪除問題工件的本地「存儲庫」子目錄 - 假設您修復了它的問題。 :)

mvn -U將強制從遠程存儲庫更新 - 再次,假設您現在已與所述工件一起遠程填充。

0

我運行到類似的問題,當我的新項目依賴於oracle jdbc jar(我已經安裝在我的本地存儲庫中,並且適用於其他項目)。我嘗試了-U選項,刪除.lastupdate文件或整個目錄並再次下載,但它不起作用。最後,我刪除了目錄,並再次在本地安裝它,它工作。

0

我在Maven周圍發現的錯誤之一是當我把我的settings.xml文件放在錯誤的目錄中。它必須位於用戶主目錄下的.m2文件夾中。檢查以確保它位於正確的位置(如果使用的話,還有settings-security.xml)。

0

當我通過shell腳本安裝本地工件時,我在Ubuntu Linux中有DependencyResolutionException。解決方案是刪除本地工件並再次「手動」安裝它們 - 通過終端呼叫mvn install:install-file

-2

請試試這個命令。

MVN驗證

7

如這裏的選項,我沒有工作,我分享我如何解決它:

我在我的項目中,有一個父項目(擁有自己的pom.xml)有許多孩子模塊,其中一個(A)對另一個孩子(B)有依賴性。當我在A中嘗試mvn package時,它不起作用,因爲B無法解析。

執行mvn install在父目錄做了這項工作。之後,我可以在A內部執行mvn package,然後才能找到B.

+0

哇 - 這是***真的很糟糕***對我來說。父項目有非常大的模塊,這些模塊不是我在嵌入式設備上需要的(小)模塊的依賴關係。 Upvoting * info *(「不要拍攝信使」).. – javadba

+0

謝謝!這讓我瘋狂。 mvn clean package jboss-as:部署工作時,我在一條線上執行,但不是當我分別做他們。 – PMorganCA

3

即使在離線模式下,如果存在依賴關係的_remote.repositories標記,maven將檢查遠程存儲庫。如果您需要在離線模式下運行,則可能需要刪除這些文件。

下面我有一個簡單的shell命令來刪除這些標記文件。如果您只在機器上使用離線模式,這是安全的。 我不會在需要從網上下載文件的計算機上執行此操作。

我在與網絡斷開的構建服務器上使用了此策略。我們必須將存儲庫傳輸給它,刪除標記文件,然後以離線模式運行。

在Linux/Unix,你可以刪除遠程存儲庫標記文件是這樣的:

cd ~/.m2 
find -name "_remote.repositories" type -f -delete