2012-04-05 99 views
9

我是Maven的新手,並且在添加依賴關係方面苦苦掙扎。我想現有的項目轉換爲Maven的,並添加依賴關係在我引用的庫中的所有罐子後,我收到關於失蹤文物的錯誤消息:尋找缺失的Maven工件

Missing artifact stax:stax:jar:1.0  
Missing artifact clover:clover:jar:1.3-rc4 
Missing artifact log4j:log4j:bundle:1.2.16 
Missing artifact stax:stax-ri:jar:1.0 

從閱讀這篇文章:How to handle Maven missing artifact errors? ,這聽起來像我需要手動下載這些罐子並將它們添加到我的本地Maven存儲庫。我的問題是我如何找到這些罐子?我嘗試使用Google搜索,我可以找到具有相似名稱的罐子,但不完全像這些,所以我不確定它們是否是正確的罐子。

處理此問題的任何提示? log4j jar是我原始項目中被引用的庫中唯一明確列出的,所以我猜其他jar是我需要的其他jar所必需的,我不知道在哪裏可以找到它們或者它們的確切名稱應該。

謝謝!

+0

如果您使用maven並且必須手動下載工件,那麼您正在做出嚴重錯誤的事情。發佈您的pom.xml或其相關部分。 – j13r 2012-04-05 22:55:59

+0

這就是我的想法......由Eclipse m2e插件創建的POM有幾個問題,請參閱下面的問題描述的答案。 – matthewb 2012-04-10 20:35:06

回答

21

感謝大家的回覆。問題的實際原因是,對於這3個缺失工件中的每一個,出於某種原因,當Maven將它們下載到我的本地存儲庫時,.lastUpdated被追加到jar的末尾。例如,stax-1.0.jar.lastUpdated。這就是Maven無法找到stax-1.0.jar的原因。

因此,爲了解決這個問題,我不得不手動下載stax-1.0.jar,然後將它安裝到本地maven倉庫中,與混亂的文件完全相同,以便Maven能夠找到它。 (例如,使用命令:

mvn install:install-file -Dfile=<path-to-file>/stax-1.0.jar   
-DgroupId=stax -DartifactId=stax -Dversion=1.0 -Dpackaging=jar 

使用完全相同的groupId和artifactId的爲現有的,不正確的文件,以便行家發現它是至關重要的

+1

感謝您分享您的解決方案。我會將它添加到我的本地大腦存儲庫中,以便它發生在我身上。大聲笑。此外,還可以選擇刪除存儲庫目錄並讓maven嘗試並重新獲取文件。這在過去對我有用! – 2012-04-09 20:20:48

+0

@MikeMcMahon @MikeMcMahon你說失敗保險是找到'.m2' repo目錄並刪除它,* force * Maven重新找到/重新下載libs? – mmcrae 2014-11-10 22:48:08

+0

@ mmcrae yes - 它通常位於'C:\ users \ \ .m2 \ repository'或'文件和設置'爲較老的基於Windows的系統(nix應該是'/ home//.m2 /')。從那裏可以刪除存儲庫文件夾,並允許Maven從更大的Maven倉庫中重新下載所有的依賴關係。從歷史上看,但肯定不是那麼常見,依賴關係可能會被搞砸或損壞。這將允許maven重新下載並重建存儲庫。 – 2014-11-11 01:32:27

1

這很可能是您的POM定義對於log4j不正確。與log4j相關的一切都應該在maven中隨時可用。

另外,如果你知道包的名稱(如log4j的),你幾乎總是可以做一個快速谷歌搜索「[包名稱] Maven POM文件」前幾個點擊您應該得到內maven回購,其中包含關於如何包含它的快速片段,或捆綁的jar和maven說明的實際網站。

例如log4j的:

<dependencies> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
    </dependency> 
</dependencies> 

雖然有時你只需要指定庫找到該項目(如果它不能在更大的Maven倉庫託管)

你可以指定一個像這樣的新儲存庫

<repositories> 
    <repository> 
     <id>Java.Net</id> 
     <url>http://download.java.net/maven/2/</url> 
    </repository> 
</repositories> 

最後,當你絕對找不到該工件時,maven'd u P代表你(這通常是專有罐子和,或者你不能用你的項目包括司機真)則可以讓用戶通過命令行

MVN安裝手動安裝項目:安裝文件-DgroupId = [組ID] -DartifactId = [神器-ID] -Dversion = [版本] -Dfile = /路徑/要/的/文件-Dpackaging =【類型】

然後,您可以參考它在你的Maven文件使用上面描述的信息

例如我有一個salesforce.com pr的自定義參考oject

MVN安裝:安裝文件-DgroupId = com.salesforce -DartifactId = WSC -Dversion = 22 -Dfile = \軟件tsclient \ħ\發展\的java \ WSC-22。罐子-Dpackaging =罐子

要訪問它在行家:

<dependency> 
    <groupId>com.salesforce</groupId> 
    <artifactId>wsc</artifactId> 
    <version>22</version> 
</dependency> 

最後,你可以找到在各自網站的罐子(或他們的行家資訊)(請注意,我只是立足這些開瓶蓋名稱的鏈接,這些可能不是實際的網站,以及SANS我知道是正確的log4j的)

Stax

Clover

Log4j

+0

是的,我的POM(它是由Eclipse m2e插件自動創建的)對於Log4j(以及其他有問題的構件,請參見下面的答案)不正確。對於Log4j,在「type」屬性下,它表示「捆綁」。當我刪除它,它的工作。 – matthewb 2012-04-09 19:40:20

2

下可以找到maven.apache.org依賴搜索網站。導航Menü條目常見問題(官方)和圖恩到頁面的結尾。

+1

或直接通過http://maven.apache.org/general.html#How_to_find_dependencies – 2012-04-06 16:52:40

0

你的問題可能是與。 MNG-4142。此錯誤意味着,如果localCopy在神器maven-metadata-local.xml設置爲true行家不會下載新的快照。

注意,這個bug的標題有些誤導故工作閱讀註釋。

您可能認爲使用maven的-U標誌可以解決此問題,但顯然情況並非如此。

當前的解決方法似乎是搜索maven-metadata-local.xml的所有實例並將localCopy的值更改爲false

0

我通過將log4j版本從1.2.15更改爲1.2.16來解決此問題。

0

它也可能是由dom4j造成的。使用以下設置時發生同樣的錯誤。

<dependency> 
    <groupId>dom4j</groupId> 
    <artifactId>dom4j</artifactId> 
    <version>20040902.021138</version> 
</dependency> 

更改爲以下後,錯誤消失。

<dependency> 
    <groupId>dom4j</groupId> 
    <artifactId>dom4j</artifactId> 
    <version>1.6.1</version> 
</dependency> 
1

你可以嘗試新的存儲庫添加到您的pom.xml

<repositories> 
    <repository> 
    <id>java.net</id> 
    <url>http://download.java.net/maven/2/</url> 
    </repository> 
     <repository> 
     <id>jboss</id> 
     <url>http://repository.jboss.com/maven2</url> 
</repository> 
</repositories> 
1

幾天後,這個愚蠢的錯誤竊聽我,我發現下面article

作者介紹有工作空間存儲庫,可能會過時。在我的情況下,它只是幫助再次導入正確的插件。工作區存儲庫已更新,一切正常。