2015-06-27 49 views
0

當我運行如何在maven中添加jar依賴項?

mvn compile 

我得到package com.ibm.icu.util does not exist。於是我下載了ICU4J jar並將其安裝到本地存儲庫中。我確認它在.m2/repository/com/ibm/icu/icu4j/3.4.4/icu4j-3.4.4.jar。裏面的jar文件是缺少的類文件com/ibm/icu/util/Calendar.class。然後,我添加了以下內容的pom.xml依賴關係部分:

<dependency> 
    <groupId>com.ibm.icu</groupId> 
    <artifactId>icu4j</artifactId> 
    <version>3.4.4</version> 
</dependency> 

但是當我再次運行mvn compile,我得到了同樣的錯誤。我究竟做錯了什麼?

+0

(1)爲什麼古代版本? (2)你爲什麼不從中央解決這個問題? – chrylis

+0

你嘗試過'mvn clean'嗎?或者說你是'repository'目錄,並允許maven重新下載所有東西。你不應該手動添加一個jar,當然這是一個信號不同步的標誌。 –

+0

mvn clean是什麼讓我陷入這個錯誤。它在我做之前正在工作。我無法下載,因爲它是在沒有互聯網連接的遠程服務器上編譯的。 – user3217883

回答

0

你不應該手動將東西安裝到Maven倉庫目錄中。該目錄由maven自己維護。

方式依賴關係的工作原理是,當您運行mvn compile或其他一些目標時,它將連接到maven中央存儲庫並下載所需的依賴關係及其依賴關係。

如果您手動安裝一個jar文件,它可能沒有它的依賴關係。那個icu神器可能會有其他依賴的東西。 Maven將自動解決這些依賴關係。

我會建議使用mvn clean install這將清理目標目錄並重建所有內容。

如果下載失敗,那麼您可能需要更改maven配置。例如,如果您在代理服務器後面,則需要使用代理憑證配置maven。另外,如果您手動將任何內容複製到.m2/repository /目錄中,則應該將其刪除,並讓maven正確地將其放入.m2/repository /目錄中。

maven的美妙之處在於,您無需擔心下載罐子等事情。它只是爲你處理。讓它做它的工作。

+0

我試過你的建議mvn乾淨安裝,但得到了同樣的錯誤。我希望我可以讓maven完成它的工作,但不幸的是,我建立的遠程服務器是在一個專有的intranet中,沒有連接到互聯網,所以maven無法下載任何文件。我不得不手動下載並安裝300個文件才能使其工作。這對我來說是一個謎,爲什麼乾淨會導致它停止工作。它只是清除目標文件夾? – user3217883

+0

您手動下載300個文件的事實意味着您的maven配置或您使用maven的方式有問題。也許你應該嘗試重命名你的倉庫,並讓Maven自己重新創建一個新倉庫。 – Jon

+0

Clean只清理目標目錄。它不會混淆版本庫目錄。據我所知,沒有任何命令可以清除存儲庫中的任何內容。這是因爲maven不希望你弄亂那些目錄。它們意味着由它來管理。如果您的存儲庫已損壞,請嘗試我上面的建議。 – Jon

0

如果你有像JFrog這樣的內部工件,也許你應該檢查jar是否在那裏。不要手動下載到.m2,因爲它至少有點奇怪。您最多可以手動上傳該工件中的jar。

1

您應該避免手動添加依賴關係。

如果您不知道所需依賴項的groupId和artifactId,請在http://mvnrepository.com/處進行搜索。通常,groupId與jar文件中的包名稱匹配。

對於您的情況下,依賴關係已經存在:http://mvnrepository.com/search?q=com.ibm.icu 所以,去http://mvnrepository.com/artifact/com.ibm.icu/icu4j並獲得您需要的依賴,例如版本55.1:http://mvnrepository.com/artifact/com.ibm.icu/icu4j/55.1 搶行家依賴XML並把它放到你的pom.xml文件:

<dependency> 
    <groupId>com.ibm.icu</groupId> 
    <artifactId>icu4j</artifactId> 
    <version>55.1</version> 
</dependency> 

如果你沒有找到你所依賴的嘗試找到它在谷歌。有時可能會在某些企業公共存儲庫中找到依賴項,而不是central。在這種情況下,您需要將第三方存儲庫添加到您的pom.xml的repositories section


如果您無法找到那麼公共庫的依賴關係,你有三種選擇:

A.安裝罐子內部存儲庫服務器(例如關係)

乙。把JAR文件在您的項目來源和declare project maven repository

<repositories> 
    <repository> 
     <id>my-local-repo</id> 
     <url>file://${basedir}/my-repo</url> 
    </repository> 
</repositories> 

重要事項:您應該將maven repository layout保存在本地存儲庫中。

C. [錯誤的做法]使用maven install plugin將您的自定義jar安裝到您的機器上的本地存儲庫。但它是一個壞它不建議。

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=path-to-your-artifact-jar -DpomFile=path-to-pom 

D. [壞習慣]使用system dependency絕對路徑JAR文件,雖然這是一個不好的做法,應該儘量避免。

<dependency> 
    <groupId>test</groupId> 
    <artifactId>test</artifactId> 
    <version>X.Y.Z</version> 
    <scope>system</scope> 
    <systemPath>${user.home}/jars/my.jar</systemPath> 
</dependency> 
+0

我會嘗試本地存儲庫的東西,但它對我來說沒有意義,爲什麼我所做的這一次不起作用,就像其他時間一樣。 – user3217883

+0

我在這裏創建了一個本地倉庫:/ export/home/ripper/maven/repository,並安裝了icu4j-2.6.1.jar。還安裝了關聯的.pom文件。將存儲庫標記添加到主pom.xml。結果:同樣的錯誤! – user3217883

+0

你應該在你的本地倉庫中保存Maven倉庫結構。你應該有兩個文件:'/ export/home/ripper/maven/repository/com/ibm/icu/icu4j/55.1/icu4j-55.1.jar'和'/ export/home/ripper/maven/repository/COM/IBM/ICU/ICU4J/55.1/ICU4J,55.1.pom' –

相關問題