2013-04-16 35 views
0

我目前正在研究具有以下結構的多模塊項目。多模塊maven項目的自定義階段

root 
    -module A 
    -module B 

我想要做什麼是模塊B的編譯後執行模塊B(該模塊的主要方法)(模塊B取決於模塊A)。但我需要使用自定義命令來完成此操作。

防爆 -

mvn runb 

我知道EXEC Maven插件可用於運行使用maven的項目。我不明白的是如何在maven中創建自定義命令(階段)。無論如何不寫一個maven插件來實現這一點?

我提到了各種指南,如https://community.jboss.org/wiki/CreatingACustomLifecycleInMaven試圖達到此目的。但是他們需要在src/resources/META-INF下創建components.xmllifecycle.xml文件。我不明白如何將該文件結構應用到我的項目中,因爲它是一個多模塊項目,其中每個模塊都有單獨的目錄src

(我使用maven 3)

+0

這聽起來像集成測試Maven中存在的所需。存在預集成測試生命週期階段和集成測試生命週期階段,因此您可以將exec插件綁定到該階段並運行** mvn verify ** – khmarbaise

回答

6

不能創建無需編寫Maven插件自定義的生命週期。

並且在沒有黑客入侵Maven的情況下,至少從Maven 3.0.5開始,通過插件向Maven添加自定義階段是不可能的。在處理任何插件之前,這些階段將由Maven的核心從其配置加載。

如果你真的想用一個命令來做你想做的事,那麼寫一個插件是唯一的方法。在您的settings.xml中有一些pluginGroup mappings,這可以變得更簡單(您可以指定mvn my:plugin而不是mvn com.mygroupid:plugin)。

但是,如果您願意在命令行中使用稍微冗長的語法,您可以通過配置文件和exec maven plugin來實現您想要的功能。


向使用exec插件運行自身的模塊B添加配置文件。

事情是這樣的:

<project> 
    ... 
    <profiles> 
     <!-- This profile uses local webapp security instead of the BlueCoat device, useful for testing --> 
     <profile> 
      <id>execb</id> 

      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.codehaus.mojo</groupId> 
         <artifactId>exec-maven-plugin</artifactId> 
         <version>1.2.1</version> 

         <executions> 
          <execution> 
           <id>runb</id> 
           <goals> 
            <goal>java</goal> 
           </goals> 
           <phase>verify</phase> <!-- Anything after package phase --> 
           <configuration> 
            <!-- Exec plugin configuration goes here --> 
           </configuration> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 
</project> 

你需要取決於你如何運行你的JAR,更多信息here配置Exec插件。

這是做什麼是運行exec插件作爲模塊B的內部的一部分,但只有當execb配置文件被激活。


現在,當你只是想建立項目(不加任何可執行程序),打造像正常(例如mvn install)。

如果你想建立和運行,使用命令行:

mvn install -Pexecb 

,它會做的高管作爲構建的一部分。