【问题标题】:Execute maven plugin after build of one submodule构建一个子模块后执行maven插件
【发布时间】:2014-03-19 12:04:21
【问题描述】:

我有一个由几个子模块组成的 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 子模块 - 因此 @ 987654331@ 命令行选项不适用于这种情况?

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

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

【问题讨论】:

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

标签: java maven


【解决方案1】:

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

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

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

插件不会为那个 pom 执行。

【讨论】:

    猜你喜欢
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2017-02-22
    • 2011-07-24
    • 2016-02-27
    • 2010-12-12
    相关资源
    最近更新 更多