定义将在 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.
请特别注意,没有前导 groupId
的 artifactId
仍然有前导冒号。
因此,例如,在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 多项目构建中构建的模块列表的主要内容,如果未能解决你的问题,请参考以下文章
多模块本地 jar 依赖项 - Jenkins Pipeline