【发布时间】:2020-11-18 02:11:40
【问题描述】:
我有一个多模块 maven 项目,其中模块之间有很多依赖关系。我曾尝试并行运行我的测试,但由于模块没有经过深思熟虑并且相互高度依赖,我基本上没有时间获得,因为它们最终仍然按顺序执行。
现在,在完全运行测试之前,我有一个构建项目的阶段,以便我可以在测试的同时应用其他静态分析工具。
我的问题是:鉴于我的模块已经编译,我可以不告诉 maven 使用这些预编译的类并行运行测试,而不是等待依赖模块先运行它们的测试吗? 例如。目前,如果我有一个依赖于模块 B 的模块 A,模块 B 将在 A 启动之前先执行其所有测试。由于我已经构建了 A 和 B,因此我无需保留此限制。
我目前运行测试的方式类似于:
mvn -f project-parent/pom.xml surefire:test 其中 project parent 是我所有其他模块的父模块。为简洁起见,我省略了配置文件和其他参数。
谢谢!
编辑:此时我正在尝试使用 junit 或 surefire 避免类/套件级别的并行化,并且只想以并行方式测试模块。
【问题讨论】:
-
为什么在运行测试之前先构建模块?为什么不直接使用
mvn clean install构建所有内容? -
@JFabianMeier 我按照全新安装的方式做了一些事情,但最初跳过了测试,以便我可以与其他代码分析工具并行运行测试。
-
如果它们相互高度依赖,要么重构依赖的位,要么在未使用的情况下删除依赖。正如您已经说过的那样,旨在使本质上是
List而不是有些平衡的Tree的反应堆构建并行化是行不通的。 -
这是一个功能而不是一个错误。如果模块 B 未能通过测试,那么模块 A 也可能无法通过测试,因为模块 B 无法正常工作。您的测试结果中会出现额外的噪音,这可能会使您或您的团队更难确定真正的问题。
-
@JohnBrandli 完全可以理解,而且我确信在许多情况下都很有用 - 但它也可以禁用吗? :)
标签: java maven testing build parallel-builds