2012-04-05 49 views
5

我應該針對多個目標平臺上建立一個神器:同步工件版本與Maven釋放過程

  • Linux x86的
  • 的Windows 86
  • ARM11

不幸的是,由於由於缺少交叉編譯器,不可能一次創建所有版本的工件。

使用換句話說,我們的目標是在存儲庫這樣的事情

  • artifact-1.0.0-linux.zip
  • artifact-1.0.0-windows.zip
  • 神器-1.0.0-arm11.zip
  • artifact-1.0.1-linux.zip
  • artifact-1.0.1-windows.zip
  • artifact-1.0.1-arm11.zip
  • ...

請注意,版本是同步的。如何做到這一點?

問題在於發佈過程在每次構建之後都會升級pom.xml的版本。因此,通過各種平臺上相繼建立我能夠實現具有

  • artifact-1.0.0-linux.zip
  • artifact-1.0.1-windows.zip
  • artifact-1.0.2-arm11.zip
  • artifact-1.0.3-linux.zip
  • artifact-1.0.4-windows.zip
  • artifact-1.0.5-arm11.zip
  • ...

但這不是我正在尋找的。

我可以在Linux上

MVN發佈

  1. 運行:準備發佈:執行-DpushChanges =假

    (設置爲false釋放不會增加版本號pushChanges在SCM中)

  2. 然後在Windows上運行

    MVN發佈:準備釋放:執行

    (這將增加版本號)

但隨後負責觸發在各種平臺上的發佈過程中正確的順序在於我。有沒有一種方法可以幫助我呢?

你有什麼建議嗎?

感謝


PS。請注意,這不是如何組織到模塊中的問題。它關於如何在多個平臺上同步單個工件的發佈過程。

回答

0

正如我所看到的,您可以使用分類器(工件的文件名後綴),如linux,windowsarm11來區分用於特定平臺的各種工件發佈。因此,如果您創建由Maven管理的多模塊項目,其中模塊將是具有相同groupId,相同artifactId,相同version(可能從它們的共同父項繼承),但不同於classifier的工件,您將得到完全您想要的。在這種情況下,您總是可以釋放多模塊POM(通常它也是模塊的常見父代),以便一次釋放所有模塊。假設相同版本參加的所有模塊的策略(這似乎適應得很好這裏),你基本上可以執行:

mvn release:prepare release:perform -DautoVersionSubmodules

,就是這樣。您將獲得artifact-1.0.0-linux.zip,artifact-1.0.0-windows.zip,artifact-1.0.0-arm11.zip工件發佈。所有模塊的下一個開發版本將被設置爲1.0.1-SNAPSHOT(通過父代繼承)。

+0

但我的觀點是,當你在Linux上,你不能創建一個Windows的二進制文件(由於一些工具鏈的限制)。因此,在Linux上運行時的構建過程無法創建Windows二進制文件。反之亦然。 因此,您無法一次爲所有平臺創建所有二進制文件。 --- 這不是一個關於如何組織成模塊的問題。它關於如何在多個平臺上同步單個工件的發佈過程。 – 2012-04-05 13:30:50

+0

好的,所以我很擔心Maven不會像你想的那樣自動地做這件事,除非你想(並且有一些時間)創建自己的發佈插件。正如你所提到的,你可以在不碰撞某個版本的情況下做所有的重新調整,並最終在全球範圍內將其燒燬,但這是你必須記住的。您還可以放棄通用版本控制(從父級繼承)並在所有模塊的POM中輸入字面版本。但是,這一次,您必須控制此過程,並確保所有模塊隨版本一起發佈,並且每個模塊都會發布一次。我真的無法看到100%的自動方式。 – 2012-04-05 14:28:01

+0

我總是很短的時間:)無論如何,感謝您的幫助。 – 2012-04-05 16:52:08

2

您是否找到了解決方案呢? 這是很好的知道我不是唯一一個與Maven :-)

反正打架,

你允許部署一個發佈版本的Nexus? 我在想,你可以這樣做:

1 - 從Windows機器上執行「mvn release:prepare release:perform」 - 應該將artifact-1.0.1-windows.zip轉換爲nexus。

2 - 簽出artifact-1.0。來自源代碼管理的1個標記

3 - 從linux和arm11(無論是:P)執行「mvn deploy」 - 應該將-linux.zip和-arm11.zip也納入nexus。

雖然,我認爲,這取決於關係是如何配置它不會讓你重新部署任何使用相同的GAV(即使分類是不同的)

0

你幫了我與你的問題......我不知道pushChanges = false選項。

使用Jenkins您可以在每個使用「Trigger遠程構建(例如,從腳本)」功能執行maven發行版的平臺上設置作業。如果您願意,可以使用參數化版本來選擇要構建的版本(如果使用該版本,則需要使用Parameterized Trigger Plugin來觸發其他平臺上的版本)。