在构建一个子模块后执行maven插件

时间:2014-03-19 12:04:22

标签: java maven

我有一个由几个子模块组成的maven项目。

让我们调用子模块sharedwebapp。该项目通常是从父POM构建的,它位于父目录中。所以目录布局如下:

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

我有一个特定的插件,我想从顶级目录的命令行执行。我不希望它在任何阶段默认运行。所以通常我想运行mvn clean install,在这种情况下插件不应该执行。但是我也希望能够说mvn clean install com.mycompany:myplugin:goal并且执行应该在这种情况下运行,但执行应该只为webapp子模块运行一次。当我在命令行中指定时,执行不应该为父POM或shared子模块运行。

我遇到的问题是,如果我在父POM中定义执行,它会为每个子模块重复运行。如果我在webapp POM中定义执行,则无法通过Maven的命令行调用来访问它。

我想在单个Maven命令中执行此,并且该单个命令也必须能够构建&运行所有子模块的阶段 - 而不仅仅是webapp子模块 - 因此-pl命令行选项对于这种情况不起作用?

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

这样的事情可能吗?如果这是不可能的,我会接受一个说明的答案。

1 个答案:

答案 0 :(得分:0)

必须在父pom中定义插件才能在父级别执行。但如果在父级中定义,则会为所有模块执行插件。 由于这是您的插件(com.mycompany:myplugin),您可以在插件实现中定义“no-op”配置选项。然后,在您希望插件无效的每个pom中,使用该配置选项。

例如,docker-maven-plugin就是这样做的。如果您使用:

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

该插件不会为该pom执行。