2010-03-24 82 views
17

我想將maven生命週期中的某些階段分解爲子階段。我想控制從一個子階段到另一個階段的執行流程,有點像螞蟻依賴。如何在單個階段內執行多個Maven插件並設置各自的執行順序?

例如,我想使用NSIS插件將我的項目打包到包裝階段的安裝程序中,之後我的項目被打包成一個war文件。我想在包裝階段做所有的事情。

這可能嗎?

由於

+0

不Maven的執行勢必它們在POM列出的順序相同的生命週期階段插件的目標?只是一個猜測,可能值得測試... – 2010-03-24 16:47:46

+0

不知道...我會試一試 – Yaneeve 2010-03-24 17:12:38

回答

13

插件綁定到相同的相位應,因爲它們在POM中列出的相同的順序執行。在某些情況下(例如,如果您將相同的插件綁定到階段兩次,如antrun插件),這可能不會發生,但這是一個錯誤(請參閱MNG-2258和相關問題MNG-3719)。

+0

但是如果你在不相關的塊中指定它們,比如普通構建塊與構建塊的配置文件塊?在配置文件塊中可能會有一些插件在插件塊中的插件之後運行,但其他插件可能不會。 – Matthias 2011-11-02 10:37:03

+9

這不會發生(至少在maven 3.0.4中)。我有兩個執行綁定到生成源的插件,其中一個列在約6個插件的列表中,另一個列在最後。但是,最後列出的一個(取決於首先列出的那個)總是首先執行。 – matt5784 2012-05-23 18:32:52

+0

同意matt5784,這很煩人:( – 2012-07-27 23:51:48

6

我有同樣的問題。看看How to perform ordered tasks in Maven2 build。 由於某種原因,綁定到階段的不同目標被存儲在哈希映射或其他無序結構中,這使得執行順序是隨機的。 我的解決方案是將任務分散到不同的階段,但我不認爲您的案例中有太多的意義(nsis包裝不是預集成測試)。 您可以執行下列操作之一:

1)試試你的運氣,看看Maven的chosses您正確的順序(你可能嘗試過的話)

2)使用獨立的插件 - 運行外的目標生命週期。例如: mvn包org.codehaus.mojo:nsis-maven-plugin:1.0:編譯。

3)將它們分成模塊:有一個包含兩個子模塊的父包,一個是你的戰爭項目,另一個是nsis項目。

4)通過改變類型來使用自定義生命週期,在你的情況下你可以使用「exe」。這是通過使用自定義插件擴展(guide to using extension

5)使用jetspeed-mvn-maven-plugin。我從來沒有用過它,但它似乎與您的需求有關。

希望這給你新的想法。

羅南

+0

謝謝,但除了默認生命週期@Pascal的一些「扭結」是對的 – Yaneeve 2010-03-25 09:21:28

+1

那些沒有「扭結」。實際上,如果你問Maven傢伙,他們會告訴你,第3號最符合模塊分離的「Maven方式」,當你考慮它時,創建Web應用程序和安裝程序項目是兩件獨立的事情。 – rperez 2010-03-25 11:44:49