2015-04-03 39 views
3

我有一個使用LibraryY的java spring webapp,WebappA。 LibraryY使用另一個庫LibraryZ。用本地叉子工作的maven方式是什麼?

LibraryY和LibraryZ都是帶有可叉式github回購的OSS。

我想改變一下LibraryZ中的某些東西,這樣我的變化就可以被推回原點回購。

使用maven和github做這件事的快樂途徑是什麼?什麼是maven方式?

我git克隆了Y和Z到我的機器上,然後我在每個機器上運行了mvn install。他們各自建立,罐子生產,並沒有問題,但WebappA依賴於RELEASE構建,所以我使* -SNAPSHOT構建在〜/ .m2/[...]中什麼也沒做。我認爲?這很好。

我該如何將源代碼更改爲LibraryZ以便WebappA在本地使用它?我試過把LibraryZ的版本號改爲「* -mybuild」,但是它本身沒有生成,因爲它的子模塊沒有依賴關係,所以聲明瞭LibrayZ作爲它的父對象,並且引用了它們的「父對象」按版本號?我認爲?

一位同事建議更改LibraryZ的groupId,但我沒有嘗試過,因爲這似乎比改變所有這些pom文件中的所有版本號更瘋狂。

它看起來像快樂的路徑改變了幾十個POM文件,但版本號有所變化,但這似乎是瘋狂和錯誤的。

我覺得我錯過了一些東西,因爲這看起來不正確。

什麼是更改我的應用程序使用的java庫的本地分支的更改的maven方法?

謝謝!

-neil

+0

什麼了關於GitHub,有沒有與快照依賴該項目的可用「發展」分支? – 2015-04-03 05:55:39

+0

好問題,但我問的是maven的成語。我應該期待嗎? – 2015-04-03 06:07:43

+0

當您使用快照和其他版本構建庫Z時,您能否解釋確切的錯誤? 絕對改變groupId不是解決方案(即使它工作,也不應該使用) – 2015-04-03 06:12:53

回答

2

有兩個獨立的比較方面問題的方法:

  1. 如何確保您的應用程序A和圖書館y使用Z.
  2. 您的分叉版本如何避免你的叉子和正式版Z之間的混淆。

關於1.,假設你的出發點是發佈 Z的版本,比如說1.5.0,你可以分叉Z的主分支或者主幹分支,它很可能在下一個快照版本中,比如說1.5.1-SNAPSHOT。

如果您想從1.5.0基準線開始,包括您自己的修改,並且不包括Z master的任何其他最近更改,那麼您將從1.5.0標籤開始分支,必須將Maven版本更新到1.5.1-SNAPSHOT(或其他任何你喜歡的SNAPSHOT)。您可以使用mvn versions:set來這樣做。

使用A的POM的<dependencyManagement>部分將Z的版本設置爲1.5.1-SNAPSHOT。這將覆蓋由Y引用的Z的版本。

這將足以測試您的更改。然後,您可以向Z提交補丁或拉取請求,並希望您的更改將包含在他們的下一個版本中。如果是這種情況,那麼只需將您的dependencyManagement中的Z版本升級到1.5.1(或任何下一個正式版本)。

如果z項目不接受更改,或者如果你需要釋放出它們與下一個版本之前做,那麼你就需要2

到目前爲止處理方面,你有你自己的本地1.5.1-SNAPSHOT與官方Z快照不同,這是正常的,因爲Maven快照無論如何都是不穩定的。但是,你的A版本不能依賴於Z快照,並且所有版本(包括Z's)都是不可變的,所以你應該簡單地構建你的Z叉的本地版本並且把它叫做1.5.1,因爲這個版本不會可能與下週可能發佈的官方Z 1.5.1版本有所不同,或者可能永遠不會。

在這種情況下,它是常見的做法(例如,在WildFly/JBoss的社區項目),以保持官方groupIdartifactId,但使用的版本帶有後綴像1.5.0-foo-1,其中foo是與你的項目或單位的一些標識。

你應該發現錯誤在你的叉子,你可以做後續版本1.5.0-foo-21.5.0-foo-3

相關問題