我有一个由几个子模块组成的maven项目。
让我们调用子模块shared
和webapp
。该项目通常是从父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
命令行选项对于这种情况不起作用?
这样的事情可能吗?如果这是不可能的,我会接受一个说明的答案。
答案 0 :(得分:0)
必须在父pom中定义插件才能在父级别执行。但如果在父级中定义,则会为所有模块执行插件。 由于这是您的插件(com.mycompany:myplugin),您可以在插件实现中定义“no-op”配置选项。然后,在您希望插件无效的每个pom中,使用该配置选项。
例如,docker-maven-plugin就是这样做的。如果您使用:
<configuration>
<skipDocker>true</skipDocker>
</configuration>
该插件不会为该pom执行。