2014-03-13 100 views
1

我有一個大的多模塊maven項目,並使用編譯器,surefire和failsafe插件。我所有的單元測試都運行良好,我的集成測試具有故障安全性。爲什麼在整個項目運行mvn verify,它似乎做到以下幾點:Maven多模塊項目生命週期

  1. 獲取運行(基於依賴圖)
  2. 執行的整個生命週期該模塊(初始化,編譯,測試下一個模塊,集成測試,...)
  3. 重複,直到沒有更多的模塊

這是一個非常緩慢的過程,我覺得這將是更快,如果它做了以下內容:

  1. 編譯所有模塊
  2. 所有模塊運行單元測試
  3. 所有模塊

有效地做這樣的事情

  • 運行集成測試:

    1. 執行當前階段的所有模塊
    2. 轉入下一階段,重複

    但是我無法弄清楚如何設置它。這可能嗎?或者我的假設是這可能會更快?謝謝您的幫助。

  • 回答

    1

    你不能做到這一點,可以考慮以下結構

    A (pom) 
    | 
    | 
    | 
    | 
    ------B (jar) 
    |  \---C (dependency) 
    | 
    |------C (jar) 
    

    這裏B依賴於C,現在你比如你已經遵循B & c分別

    class B{ 
    C c; 
    public void sayHello(){ 
        c.sayHello(); 
    } 
    } 
    

    C

    class C { 
        public void sayHello(){} 
    } 
    

    現在你改變C級到

    class C { 
        public void sayHello(String name){} 
    } 
    

    ,如果你編寫的所有階段,它會從A開始 - C - B(依賴圖),C編譯罰款(編譯只是編譯源和拷貝類目標/類),現在你正在B上運行編譯它會編譯得很好,因爲它會從本地maven緩存中獲取B的舊版本(它仍然有沒有任何參數的方法)

    現在安裝發生在C第一次和B它會去成功

    同一件事的下一次嘗試將失敗,因爲B現在會發現不同的方法簽名

    什麼是有效這裏增量編譯,但是行家並不完全支持增量構建在真正意義上,see here is the open request for that如果你想

    只是測試執行從構建生命週期saperate你可以使用獨立的構建資料