2016-09-01 69 views
0

我想將我的Java項目構建成兩個不同的版本,每個版本都基於相同依賴項上的不同版本。具體來說,我的項目A需要依賴項B,它有兩個不同的版本(例如v1和v2)。我打算用B的每個依賴版本構建項目A,並獲取兩個不同的jar文件:A-v1.jar和A-v2.jar。源代碼是相同的,所以我不想將它複製到兩個不同的Maven項目中,因爲我期望在B版的新版本發佈時進行擴展。從同一個源代碼分支構建不同的項目版本

我到目前爲止的嘗試:我定義了兩個構建配置文件v1和v2,其中我已經指定了依賴項B的版本。這可以正常工作,因爲我可以構建兩個配置文件,但問題是我不知道如何告訴Maven向構建工件添加版本號。它始終將項目A構建到A-1.0.jar中,其中1.0是pom中的項目A版本。

我調查的一個更新:我在父pom的構建部分中添加了一個finalName元素來覆蓋默認工件命名。現在命名將如$ {artifactId} - $ {project.version.mycustomver},其中project.version.mycustomver屬性在每個構建配置文件中定義。這似乎會生成jar的正確命名,但是maven-install-plugin正在將工件名稱更改回$ {artifactId} - $ {version}。不知道爲什麼以及如何避免它。

我欣賞任何建議。謝謝, DanP

+0

您可以簡單地將依賴關係定義爲'提供的',您將只創建一個工件。你的lib的用戶可以簡單地通過添加適當的依賴版本來決定。不需要有你自己的神器的不同版本等。 – khmarbaise

回答

0

您可以使用classifier這是爲某種原因。

但是,您應該也可以使用在配置文件中覆蓋的屬性來更改version

由於您需要兩個不同的POM,每個項目的「版本」一個,實際上您需要兩個項目。但是,您可以擁有一個正常版本A.另一個爲空,但使用依賴關係管理來排除和替換從A-v1更改爲A-v2的依賴關係。

+0

我會檢查分類器。我已經使用了模塊版本的屬性。但是,雖然構建良好,但生成的pom文件(駐留在具有生成的工件的Nexus存儲庫中)將繼承屬性而不是其值。因此,當我將A-v1.jar用作另一個項目的依賴項時,構建將失敗,因爲它不會找到pom定義。 – DanP

+0

即使使用分類器,您也可以爲兩個項目使用單個POM。 – YMomb

+0

不知道我理解你對使用兩個項目的第二個建議。我不需要在兩個項目中複製源代碼嗎?我絕對想要避免這種情況。 – DanP

相關問題