2013-10-21 134 views
0

在我的多模塊Maven項目中,假設我有兩個模塊,分別爲carhorse。它們都依賴於JAR文件transport.jar,這是一個在任何聯機Maven存儲庫中都不可用的文件。因此,我需要找到一種方法來使這些模塊依賴於在項目文件夾結構中找到的某個文件。依賴於JAR的多個Maven模塊

據我所知,默認的Maven解決方案是手動在本地資源庫中註冊JAR文件。雖然這可以在開發機器上工作,但它會在構建服務器上中斷,這會在每次構建之前清除其本地存儲庫。

我一直在網上搜索如何做到這一點和關閉了一段時間,發現一些有用的東西,但沒有完全有效的東西。

例如,一個常見的答案是使用<scope>system</scope>向文件添加依賴項。但是,不僅其他人聲稱這是非常糟糕的做法,它也不適用於構建服務器。 (在附註中,我還想指出,使用JAR的絕對路徑也是不可能的,因爲它又建立在幾個不同的機器上。)

我找到了一個更有用的方法是在POM文件中定義一個本地存儲庫,指向路徑file:${project.basedir}/lib。 (Such as in this article)不幸的是,如果我將JAR和存儲庫定義放入car POM中,我無法成功將依賴項添加到horse中的JAR。我已經嘗試了horse中的car以及沒有額外的參考,並且在horse中定義了第二個存儲庫,指向file:${project.basedir}/../car/lib。如果我試圖製作第三個模塊transport-lib,這個問題也將繼續存在,專門用於包裝JAR依賴項。

我很可能會將JAR文件添加到這兩個模塊並定義兩個單獨的模塊本地存儲庫,但我真的不想,除非由於需要保留兩個(經常更新的)JAR同步等

所以,我的問題如下:有人可以給我一個確認工作的方法,讓兩個模塊依賴項目內的相同JAR文件,給定的參數和限制提到?

回答

2

最好的解決方案是使用repository manager like Archiva, Artifactory or Nexus並將該工件安裝到資源庫管理器中。之後,你可以直接在你的pom文件中使用這個工件,而不會有任何問題。

不要使用範圍的系統,因爲它會爲其他等釋放後會導致其他問題

+0

我真的想找到這樣做的Maven的唯一途徑,但最終,我不得不採取Artifactory路線。我想,贏不了他們。 – Smallhacker