定义将在 Maven 多项目构建中构建的模块列表

Posted

技术标签:

【中文标题】定义将在 Maven 多项目构建中构建的模块列表【英文标题】:Define modules list which shall be built in Maven multiproject build 【发布时间】:2014-12-13 07:12:15 【问题描述】:

我想使用 Maven -pl 选项来定义哪些特定模块应包含在反应器中。如果提供了模块路径列表,则该选项有效。不幸的是,提供模块的 artifactIds 根本不起作用。

Sonatype: Maven: The Complete Reference 文档正在使用多项目示例,其中目录名称与 artifactIds 匹配:

Using Advanced Reactor Options

是否可以将-pl 选项与artifactId 一起使用?

【问题讨论】:

你使用哪个 maven 版本?你怎么称呼它?你的 pom 文件是什么样子的? 供参考:Maven by Example:“每个模块元素对应于 simple-parent/ 目录的一个子目录”。 命名项目不被认为是最佳实践吗?目录按照他们的artifactIds?我不知道有任何子项目在我们的项目中不是这种情况,有 15 个***项目和数百个子项目。 并考虑性能。必须解析 every 子目录中的 POM 以检查 artifactId 是否适用 - 即使大多数不适用于某个构建。将绝对目录名称限制在所需范围内要快得多。 【参考方案1】:

是的,可以这样做。看看mvn --help

 -pl,--projects <arg>                   Comma-delimited list of specified
                                        reactor projects to build instead
                                        of all projects. A project can be
                                        specified by [groupId]:artifactId
                                        or by its relative path.

请特别注意,没有前导 groupIdartifactId 仍然有前导冒号。

因此,例如,在artifactId 与目录名称相同的情况下,这三行都将引用 Maven 中的同一个模块:

mvn -pl maven-core mvn -pl :maven-core mvn -pl org.apache.maven:maven-core

【讨论】:

【参考方案2】:

mvn 似乎将您与-pl 一起提供的列表放在心上,并且不会自动构建任何依赖项。

因此,除了 Joe 的回答:如果您尝试构建的项目/模块依赖于其他模块,那么您可以要求 mvn-am 一起构建它们。

-am,--also-make
       If project list is specified, also build projects required by the list

如果指定了项目列表 = 如果使用了-pl 选项

所以例子变成了:

mvn -pl maven-core -am mvn -pl :maven-core -am mvn -pl org.apache.maven:maven-core -am

【讨论】:

以上是关于定义将在 Maven 多项目构建中构建的模块列表的主要内容,如果未能解决你的问题,请参考以下文章

多模块项目中的 Maven 测试依赖项

多模块本地 jar 依赖项 - Jenkins Pipeline

maven2 多项目构建中缺少 aar 文件

笔记:Maven 反应堆

在多模块 Maven 项目中构建所有模块后,如何运行集成测试?

Maven单独构建多模块项目中的单个模块