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

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

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

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

【问题讨论】:

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

标签: maven build module multi-project


【解决方案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

    【讨论】:

      猜你喜欢
      • 2012-06-23
      • 1970-01-01
      • 2019-07-11
      • 2018-10-25
      • 1970-01-01
      • 2014-05-22
      • 2016-10-30
      • 2018-09-17
      • 2021-03-23
      相关资源
      最近更新 更多