2017-03-01 53 views
0

我們正在從螞蟻瓦特/艾維轉移到Maven。作爲這一舉措的一部分,我們已經將具有多個JAR的項目用於將分離的Ivy工件分類爲帶有分類器的Maven工件。常春藤沒有拉動分類器的罐子上的傳遞依賴

新的Maven項目對此沒有任何問題。但是,我們的Ivy項目無法找到分類器的pom.xml

在我們的Maven倉庫,他們是所有項目的罐子單pom.xml

http://repo.vegicorp.com/l/com/vegicorp/foo/1.0.0/foo-1.0.0.pom 
http://repo.vegicorp.com/l/com/vegicorp/foo/1.0.0/foo-1.0.0.jar 
http://repo.vegicorp.com/l/com/vegicorp/foo/1.0.0/foo-1.0.0-client.jar 
http://repo.vegicorp.com/l/com/vegicorp/foo/1.0.0/foo-1.0.0-test.jar 

尋找一個調試Ant構建的輸出,我看到它在尋找我們的Maven倉庫在:

http://repo.vegicorp.com/com/vegicorp/foo/1.0.0/foo-1.0.0-client.pom 

它追加分類pom.xml文件的名稱!它可以找到並下載jar,但沒有pom.xml,它無法找出依賴關係。我們的構建失敗,因爲依賴不被下載。

我假設在ivysettings.xml中有一些設置可以讓Ivy知道Pom文件沒有附加分類器,但我還沒有弄明白。

那麼,我該如何解決這個問題?我可能能夠將缺少的pom.xml複製到我們的存儲庫(這是Artifactory),但我不確定我是否可以。 (也許在Artifactory中有一個設置可以幫助解決這個問題?)。

回答

0

你需要對常春藤說要使用lBiblio resolver。您可以禁用尋找勁歌,報價從lBilbio鏈接:由

當使用m2compatible標誌,您可以禁止使用POMS的usepoms標誌設置爲false

如果一個沒有按」 t工作,更精確的設置可以通過packager resolver實現 - 在頁面底部有一個不在分類器屬性。

另外(對於任何解析器),您可能需要正確設置工件模式才能真正找到工件。

+0

我正在使用IBibilo解析器。我不想禁用poms,因爲我需要它們來查找我下載的罐子的依賴關係。我會嘗試設置打包器解析器。 –

+0

我在打包解析程序時遇到問題。我可以讓它看到分類器或不看分類器,所以我可以選擇找到POM或JAR。格兒。 –

0

我發現了一個解決,或者這可能是我應該一直這樣做的方式。

我是這樣定義在我ivy.xml文件的依賴關係:

<dependency org="com.vegicorp" name="foo" version="1.0" 
    conf="compile->default"/> 

一切都是<dependency>實體和無子實體下和它的工作就好了。默認情況下,它找到了pom.xml,將其轉換爲ivy.xml依賴文件,並下載了該jar。

當我們開始添加的分類,我們就是這麼做的:

<dependency org="com.vegicorp" name="foo" version="1.0" 
    conf="compile->default" maven:classifier="client"/> 

再次,把一切的<dependency>實體內沒有子實體。常春藤然後在com/vegicorp/foo/1.0.0/foo-1.0.0-client.jar尋找罐子是正確的,但不能找到POM在com/vegicorp/foo/1.0.0/foo-1.0.0-client.com。我們以前從未注意到這一點,因爲我們只有兩個或三個有分類器的第三方罐子,而這些罐子都沒有依賴於其他罐子。沒有關聯POM下載的jar無關緊要。

當我們開始用分類器定義我們自己的罐子時,一切都破裂了,因爲我們的瓶子有其他罐子依賴關係。

但是,如果我用了<artifact>實體,並把該分類中,一切工作:

<dependency org="com.vegicorp" name="foo" version="1.0" 
    conf="compile->default"> 
    <artifact name="foo" ext="jar" maven:classifier="client"/> 
</dependency> 

常春藤發現信息庫中的正確位置在com/vegicorp/foo/1.0.0,然後下載POM,而不在com/vegicorp/foo/1.0.0/foo-1.0.0.pom分類。然後它找到這個位置上的神器,位於com/vegicorp/foo/1.0.0/foo-1.0.0-client.jar

相關問題