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

Java 在构建一个子模块后执行maven插件,java,maven,Java,Maven,我有一个由几个子模块组成的maven项目 让我们调用子模块shared和webapp。项目通常是从父POM构建的,父POM位于父目录中。因此,目录布局如下所示: myproject/pom.xml myproject/shared/pom.xml myproject/webapp/pom.xml 我有一个特定的插件,我想从顶级目录中的命令行执行它。我不希望它在任何阶段默认运行。所以通常我想运行mvn clean install,在这种情况下插件根本不应该执行。但是我也希望能够说,mvn cle

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

让我们调用子模块
shared
webapp
。项目通常是从父POM构建的,父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 comand中执行此操作,并且该单个命令还必须能够为所有子模块(而不仅仅是
webapp
子模块)构建和运行阶段,因此
-pl
命令行选项在这种情况下不起作用

相关的:


这可能吗?如果这是不可能的,我会接受这样的回答。

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

作为一个例子,应用程序正是这样做的。如果您使用:

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

真的

插件将不会为该pom执行

在webapp中创建配置文件,并通过激活的配置文件运行它。否则我不明白你为什么需要在命令行和构建中运行这个插件?@khmarbaise是对的,这绝对是你想要的。只需在webapp中创建一个单独的概要文件,将您的目标指定到您想要的任何阶段,然后使用定义的概要文件从父级运行mvn命令。P选项甚至可以传播到子模块。profile方法工作得非常好,允许我从顶级POM访问执行——谢谢。但是,我找不到一个解决方案,它允许我在不将执行绑定到阶段的情况下从命令行调用执行。我想知道这是否可能。