【发布时间】:2014-03-19 12:04:21
【问题描述】:
我有一个由几个子模块组成的 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 子模块 - 因此 @ 987654331@ 命令行选项不适用于这种情况?
这样的事情可能吗?如果不可能,我会接受一个说明这一点的答案。
【问题讨论】:
-
在 webapp 中创建一个配置文件并通过激活的配置文件运行它。否则我不明白为什么你需要从命令行和构建中运行这个插件?
-
@khmarbaise 是对的,这绝对是您想要的。只需在 webapp 中创建一个单独的配置文件,将您的目标分配给您想要的任何阶段,然后使用定义的配置文件从父级运行 mvn 命令。 -P 选项甚至传播到子模块。
-
profile 方法运行良好,让我可以从顶级 POM 访问执行——谢谢。但是,我找不到允许我从命令行调用执行而不将其绑定到阶段的解决方案。我想知道这是否可能。