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上,这样它就永远不会被触发执行了。

<plugin>
                <groupId>group</groupId>
                <artifactId>artifact</artifactId>
                <executions>
                    <execution>
                        <id>TheNameOfTheRelevantExecution</id>
                        <phase>none</phase>
                    </execution>
                </executions>
            </plugin>

另外,补充一点:对于你exec这样的插件,虽然插件被禁用了,但是maven的命令行还会输出INFO信息告知某某模块的exec被skip了,这些信息会干扰一个外部脚本或命令执行的输出,所以你可以在maven exec:exec的后面加上-q参数来disable maven的日志信息。

Maven 的详细介绍请点这里
Maven 的下载地址请点这里

相关阅读:

Maven 3.1.0 发布,项目构建工具

Linux 安装 Maven

Maven3.0 配置和简单使用

Ubuntu下搭建sun-jdk和Maven2

Maven使用入门

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/182f71dcda1ce9a9e4e86d8f5b5df023.html