java - Maven 多模块项目生命周期

标签 java maven build

我有一个大型的多模块 Maven 项目,并且正在使用编译器、surefire 和故障安全插件。我所有的单元测试都使用 Surefire 运行,而我的集成测试则使用故障保护。为什么在整个项目上运行mvn verify,它似乎执行以下操作:

  1. 获取下一个要运行的模块(基于依赖关系图)
  2. 执行该模块的完整生命周期(初始化、编译、测试、集成测试……)
  3. 重复直到不再有模块

这是一个非常缓慢的过程,我觉得如果执行以下操作会更快:

  1. 编译所有模块
  2. 对所有模块运行单元测试
  3. 对所有模块运行集成测试

有效地做类似的事情:

  1. 执行所有模块的当前阶段
  2. 进入下一阶段,重复

但是我不知道如何设置。这可能吗?或者我的假设是这可能会更快?感谢您的帮助。

最佳答案

你不能这样做,请考虑以下结构

A (pom)
|
|
|
|
------B (jar)
|     \---C (dependency) 
|
|------C (jar)

这里 B 依赖于 C,现在您例如在 B 和 C 中分别有以下类(class)

B

class B{
 C c;
 public void sayHello(){
    c.sayHello();
 }
}

C

class C {
  public void sayHello(){}
 }

现在您将 C 类更改为

 class C {
  public void sayHello(String name){}
 }

如果你在所有阶段进行编译,它将从A - C - B(依赖图)开始,C编译良好(编译仅编译源代码并将类复制到目标/类),现在你在B上运行编译,它将编译良好,因为它将从本地maven缓存中获取B的旧版本(其中仍然有没有任何参数的方法)

现在安装首先在 C 上进行,然后在 B 上安装将会成功

下次尝试相同的事情将会失败,因为 B 现在会找到不同的方法签名

这里有效的是增量构建,但是maven并不完全支持真正意义上的增量构建,see here is the open request for that

如果您只想将测试执行与构建生命周期分开,您可以使用单独的构建配置文件来实现

关于java - Maven 多模块项目生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22389877/

相关文章:

maven - 设置环境后,“gpg.exe”未被识别为内部或外部命令?

maven - 如何在不同的阶段从Maven构建2个docker镜像?

c# - 为 x86 和 'Any CPU' 构建

.net - 仅用于将文件复制到输出文件夹的空 .net 项目?

java - Flume 代理无法传递事件

java - 变量更改时更新 UI

java - nextDouble 出现错误,如何解决该问题?

java - PreparedStatements 和绩效

android - 将 Maven 存储库添加到 build.gradle

javascript - Webpack css 在构建后更改图像路径