2009-12-05 139 views
4

我的Maven項目對非Maven的庫,它被編碼爲系統依賴的依賴:Maven的停留在舊版本系統的依賴

<dependency> 
    <groupId>com.example</groupId> 
    <artifactId>foo</artifactId> 
    <version>${foo.version}</version> 
    <scope>system</scope> 
    <systemPath>${foo.jar}</systemPath> 
</dependency> 

在庫的位置可以通過本地控制屬性:

<properties> 
    <foo.version>2.1.1</foo.version> 
    <foo.basedir>/usr/local</foo.basedir> 
    <foo.libdir>${foo.basedir}/lib</foo.libdir> 
    <foo.jar>${foo.basedir}/java/foo-${foo.version}.jar</foo.jar> 
</properties> 

近日,從庫版本2.1.1切換到2.2.0版本,所以我改變了foo.version屬性,但Maven的似乎是粘在舊版本:

... 
[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Failed to resolve artifact. 

Missing: 
---------- 
1) com.example:foo:jar:2.1.1 
... 

我已經運行了mvn dependency:purge-local-repository(實際上很多次)。字符串2.1.1未出現在我的POM,profiles.xmlsettings.xml中的任何位置。不過,每次我嘗試構建我的項目時,Maven都會因上述錯誤而失敗。

這是怎麼回事嗎? Maven在哪裏存儲依賴版本信息,我如何更新它?

+0

第一個問題:通過本地屬性,在pom.xml的意思是,不是嗎?第二個(愚蠢的)問題:爲什麼不將foo JAR添加到您的本地存儲庫中(無論如何,您的當前設置都不可移植)。 – 2009-12-05 18:05:46

+1

是的,這些屬性在POM的配置文件中定義。我可以將JAR添加到本地存儲庫,但它是本地庫的JNI綁定,所以我仍然需要解析本地屬性以設置鏈接器選項。如果'foo.version'卡在2.1.1,本地庫將不會鏈接。 – 2009-12-05 18:21:48

回答

2

我認爲${foo.version}可能會作爲過濾器屬性得到解決。你可以檢查src/main/filters下的屬性文件。

不知道這是否確實是問題,只是試一試並更新回來。

我能想到的另一個原因是 - 對com.example:foo:jar:2.1.1可能存在傳遞依賴性。這是一些其他的依賴項,需要2.1.1這個工件的版本。你可以找到哪個神器通過做mvn dependency:tree

+0

沒有。沒有src/main /過濾器。 – 2009-12-05 17:47:09

+0

檢查編輯..我認爲'mvn dependency:tree'可能會幫助你將工具帶入2.1.1 – peakit 2009-12-05 17:58:17

+0

實際上'mvn dependency:tree'因爲「缺失」依賴性而失敗。 – 2009-12-05 18:19:37

0

你知道嗎。看到@Chris Conway發現的解決方法,我認爲這可能是通過簡單運行mvn clean「解決」的。

即使它在這裏沒有幫助,當發生一些奇怪的事情時總是值得嘗試mvn clean

+3

我跑了'mvn clean'大約一百萬次。 – 2009-12-06 19:18:04

0

依賴版本衝突是一個非常常見的問題,當我們開始構建我們的應用程序時,我們從不關注或通常我們忘記了這方面的內容,除非我們的應用程序開始以意想不到的方式行事或開始出現一些異常。

對於那些有興趣瞭解依賴衝突產生的原因以及我們如何在應用程序中避免它們的讀者和訪問者,我在這裏找到了一個精確解釋的源代碼,所以我想添加我的2位到它。

http://techidiocy.com/maven-dependency-version-conflict-problem-and-resolution/

乾杯

+0

您的帖子的網址已損壞。 – mchlfchr 2015-05-08 07:23:09

+0

道歉,更正了鏈接。 – saurav 2015-05-09 08:23:56

+0

對於「爲什麼Maven在我有最新版本的相同罐子時選擇了舊版本的罐子?」 – datv 2017-06-25 08:51:20