2012-05-16 46 views
1

背景什麼是用於多SVN分支多模塊Maven項目的最佳實踐

  1. 一個行李箱和一個標準的svn佈局一個分支,/trunk/branches/prod
  2. 約20在Maven項目模塊
  3. 當我想編譯樹幹時,只需鍵入cd trunk; mvn clean package。但它會編譯每個模塊。生產需要構建時,類似的東西。
  4. 中心行家回購

問題

  1. ,如果有可能只編譯更新模塊?實際上,我只想在可能的情況下編譯修改後的源文件。我知道這是一件簡單的事情,由antmake。然而,maven compile總是從頭開始。
  2. trunk和prod中的pom.xml應該保持相同的artifactId和版本嗎?相同的artifactId和版本無法使用maven:deploy,因爲trunk和prod會覆蓋其他已部署的包。
+0

查看maven編譯器插件的2.4版本,它對多模塊項目有一些巨大的性能提升。 –

回答

1

您可以嘗試使用mvn -am -pl選項,該選項將限制對給定模塊的操作。

+-- root (pom.xml) 
    +-- client (pom.xml) dep: core 
    +-- server (pom.xml) dep: client 
    +-- core (pom.xml) 
    +-- cli (pom.xml) dep:core 

如果你做一個

mvn -am -pl server LifeCycle 

僅在服務器模塊和由服務器使用的模塊將通過適當的生命週期中運行。

mvn -am -pl cli LifeCycle 

在這種情況下,只有cli模塊和核心模塊將在給定的生命週期中運行。

+0

** - am -pl **參數正是我想要的。謝謝。 – yegong

1

mvn編譯並不總是從頭開始構建。它只編譯更改的java文件。除非你運行mvn clean compile。當然,所有的項目都將被清理,然後從頭編譯。

您可以隨時cd到您想要的項目中並自行編譯。

編輯 Maven的確實始終運行所有的階段到編譯階段,如果你調用編譯MVN有可能是插件的執行有那些費時。但是,實際編譯java文件的做法並不多於需要。運行mvn編譯兩次,你會看到消息「nothing to compile all classes are up to date」

或者是「全部文件是最新的」..?

編輯 - 問題編號2 爲什麼你從trunk和prod釋放如果從兩者產生的工件不是不同的版本? 是的他們應該有不同的版本。除非你創建了一個實驗分支,你可以將它重新合併到主幹中,而且你永遠不打算自行發佈它。在這種情況下,實驗分支不需要它自己的版本號。

+0

我明白了。謝謝你,路德維希。 – yegong