2014-03-19 99 views
2

我有一個由幾個子模塊組成的maven項目。構建一個子模塊後執行maven插件

我們稱之爲子模塊sharedwebapp。該項目通常由位於父目錄中的父POM構建。所以目錄佈局看起來像:

myproject/pom.xml 
myproject/shared/pom.xml 
myproject/webapp/pom.xml 

我有一個特定的插件,我想從頂層目錄中的命令行可執行。我不希望它在任何階段默認運行。所以通常我想運行mvn clean install,在這種情況下插件不應該執行。但是我也希望能夠說0123'並且執行應該在這種情況下運行,但是執行應該只運行一次webapp子模塊。當我在命令行中指定此操作時,不應爲父POM或shared子模塊執行該執行。

我遇到的問題是,如果我在父POM中定義執行,它會爲每個子模塊重複運行。如果我在webapp POM中定義執行,則無法通過Maven的命令行調用進行訪問。

我想在一個Maven的COMAND做到這一點和單指令還必須能夠建立&運行階段的所有子模塊 - 不僅僅是webapp子模塊 - 因此-pl命令行選項不起作用對於這種情況?

相關:Running a specific Maven plugin goal from the command line in a sub-module of a multi-module reactor project

這種事可能嗎?如果這是不可能的,我會接受一個答案說明。

+5

在webapp中創建一個配置文件,並通過激活的配置文件運行它。否則,我不明白爲什麼你需要從命令行和構建內運行這個插件? – khmarbaise

+0

@khmarbaise是對的,這絕對是你想要的。只需在webapp中創建一個單獨的配置文件,將您的目標設爲您想要的任何階段,然後使用已定義的配置文件從父項運行mvn命令。 -P選項甚至傳播到子模塊。 – jholusa

+0

配置文件方法工作得非常好,可以讓我從頂層POM訪問執行 - 謝謝。然而,我找不到一個解決方案,它允許我從命令行**調用執行,而沒有將它綁定到一個階段。我想知道這是否可能。 – amoe

回答

0

該插件必須在父pom中定義爲可在父級執行。但是,如果在父項中定義,則插件將針對所有模塊執行。 由於這是你的插件(com.mycompany:myplugin),你可以在插件實現中定義一個「no-op」配置選項。然後,在每個你希望插件什麼都不做的地方,你使用這個配置選項。

舉例來說,docker-maven-plugin就是這樣做的。如果您使用:

<configuration> 
    <skipDocker>true</skipDocker> 
</configuration> 

插件不會爲該pom執行。