1. 程式人生 > >Maven中如何禁止外掛(plugin)在子模組(module)上執行

Maven中如何禁止外掛(plugin)在子模組(module)上執行

在多模組工程下,在父工程下執行的外掛預設會在其所有的子模組上也執行一遍,大多數情況下這是合理的,比如像compiler這樣的外掛,但是有時候也種行為可能並不是開發人員所期望的,比如使用exec外掛呼叫一個外部指令碼或命令,一般來說開發人員只希望在父工程下maven exec:exec來執行一次該命令即可,但在多模組下,你會發現這個同樣的命令被執行了多次,多出來的執行是在每個子模組上執行的,於是我們需要一種方法來禁用外掛在子模組上的執行,一般來說兩個方法:

一:查閱外掛的文件,某些外掛會主動提供禁用配置,以exec外掛為例,如果子模組想禁用外掛可以這樣配置:

            <!-- Disable plugin exec running on sub-modules -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>${exec.version}</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>

二:將指定的execution(注意命令列執行的exectuion是default-cli)的phase設定為none,其實這是有點hack的做法,目地是將這個exection繫結到一個不存在的phase上,這樣它就永遠不會被觸發執行了。以jar外掛為例:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>${jar.version}</version>
                <executions>
                    <execution>
                        <id>default-jar</id>
                        <phase>none</phase>
                    </execution>
                </executions>
            </plugin>


另外,補充一點:對於你exec這樣的外掛,雖然外掛被禁用了,但是maven的命令列還會輸出INFO資訊告知某某模組的exec被skip了,這些資訊會干擾一個外部指令碼或命令執行的輸出,所以你可以在maven exec:exec的後面加上-q引數來disable maven的日誌資訊。