2014-01-26 56 views
1

TL; DR:使用maven,我想在test階段開始時運行插件目標,然後才能運行測試。什麼是乾淨的方式來做到這一點?在默認狀態之前運行插件目標


我想在測試實際運行之前打印消息。因此,我想在測試階段開始時使用echo pluginecho目標(告訴用戶如果每次測試都失敗了,他最好看一看README,因爲他應該首先設置一個測試環境)

嘗試N°1

一個簡單的方法可以是在運行the previous phase這個插件,process-test-classes

它的工作原理,但它似乎並沒有語義正確的把這個任務給這個階段綁定...

嘗試N°2

Maven documentationWhen multiple executions are given that match a particular phase, they are executed in the order specified in the POM, with inherited executions running first.,所以我試圖設置明確surefire插件:

... 
<plugin> 
    <groupId>com.soebes.maven.plugins</groupId> 
    <artifactId>maven-echo-plugin</artifactId> 
    <version>0.1</version> 
    <executions> 
    <execution> 
     <phase>test</phase> 
     <goals> 
     <goal>echo</goal> 
     </goals> 
    </execution> 
    </executions> 
    <configuration> 
    <echos> 
     <echo>*** If most tests fail, make sure you've installed the fake wiki. See README for more info ***</echo> 
    </echos> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.16</version> 
    <executions> 
    <execution> 
     <phase>test</phase> 
     <goals> 
     <goal>test</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 
... 

但是測試運行之前,我的郵件打印。

所以,簡而言之:有沒有辦法達到我的目標,還是應該堅持「process-test-classes解決方案」,即使它看起來有點「哈克」?

謝謝!

+1

那豈不是更好您的測試之前檢查假冒維基的存在?除此之外,它聽起來像運行集成測試而不是單元測試。 – khmarbaise

回答

6

正如@khmarbaise所說,您的解決方案仍然很糟糕,因爲整個測試看起來像集成測試,應該由Failsafe Plugin處理。故障安全具有良好的相位pre-integration-test測試假維基等:)

基於Guide to Configuring Default Mojo Executions這個工作對我來說:

<plugin> 
    <groupId>com.soebes.maven.plugins</groupId> 
    <artifactId>maven-echo-plugin</artifactId> 
    <version>0.1</version> 
    <executions> 
     <execution> 
      <id>1-test</id> 
      <phase>test</phase> 
      <goals> 
       <goal>echo</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <echos> 
      <echo>*** If most tests fail, make sure you've installed the fake wiki. See README for more info ***</echo> 
     </echos> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.16</version> 
    <executions> 
     <execution> 
      <id>default-test</id> 
      <configuration> 
       <skip>true</skip> 
      </configuration> 
     </execution> 
     <execution> 
      <id>2-test</id> 
      <phase>test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

這對我來說是很奇怪的;)

我有兩個插件與執行綁定到生成源,其中一個列在大約6個插件的列表中,另一個列在最後。但是,最後列出的一個(取決於首先列出的那個)總是首先執行。

How can I execute several maven plugins within a single phase and set their respective execution order?

+1

謝謝,無論是爲解決方案,爲我指出故障安全插件,並鏈接到文檔! – gturri

+0

非常好的技巧,但它會輸出以下內容: [INFO] --- maven-surefire-plugin:2.18.1:test(default-test) [INFO]跳過測試。 一個更好的配置將是 '解除綁定' 的階段: \t 默認測試 \t 沒有 。這也適用於其他可能沒有跳過屬性的插件。 – dcendents

相關問題