Maven 如何从并行构建中排除一些项目构建?

Maven 如何从并行构建中排除一些项目构建?,maven,concurrency,Maven,Concurrency,我正在使用TDD,并且有许多具有端到端测试的模块 其中一些正在同一端口上启动服务器,因此我无法使它们并行 如何将某些工件标记为不并行运行?有几个选项: Maven的并行构建功能是“依赖感知”的,因此如果模块B依赖于模块A,那么模块B将始终在模块A之后构建。这将取代并行构建指令。因此,您可以添加一个依赖项来强制串行构建。但是,是的,这是人为的,可能会很尴尬 将构建拆分为可以安全并行运行的模块子组,然后使用-pl为每个子组运行mvn命令,以指示Maven构建每个子组 -pl,--projects以逗

我正在使用TDD,并且有许多具有端到端测试的模块

其中一些正在同一端口上启动服务器,因此我无法使它们并行

如何将某些工件标记为不并行运行?

有几个选项:

  • Maven的并行构建功能是“依赖感知”的,因此如果模块B依赖于模块A,那么模块B将始终在模块A之后构建。这将取代并行构建指令。因此,您可以添加一个依赖项来强制串行构建。但是,是的,这是人为的,可能会很尴尬

  • 将构建拆分为可以安全并行运行的模块子组,然后使用
    -pl
    为每个子组运行
    mvn
    命令,以指示Maven构建每个子组

  • -pl,--projects以逗号分隔的指定
    改为建造反应堆项目
    在所有项目中。项目可以是
    由[groupId]指定:artifactId
    或者通过它的相对路径。
    
  • 定义配置文件以创建逻辑子组,这样,如果模块A和模块C属于名为“Foo”的子组,则这些子模块将由
    -PFoo
    激活

  • (可能)重做您的测试,以便它们可以安全地并行。你可能已经考虑过了,所以我在这里只是为了补充

  • 注意:选项
    2
    3
    实际上是相同的,它们只是在父项目中定义逻辑“可并行”子组的两种不同方式。

    如下面@glitch所述(cit)“Maven的并行构建功能…如果…那么模块B将始终在模块A之后构建。”这是一个真正的进程所没有的自由度。这意味着Maven在“just”
    [CONCURRENT]
    调度策略下构建(如依赖关系图所允许,将部件移动到
    [SERIAL]
    -构建序列中(同样是“just”
    [CONCURRENT]
    中常见的步骤,但在真正的
    [PARALLEL]中不常见)
    -计划,即使所有Maven的推广人、爱好者和/或失明的怪胎都称之为平行或平行^2)。永远不要将“奇数”称为“偶数”。是的,永远不要
    -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.