我有一个大型的多模块 Maven 项目,并且正在使用编译器、surefire 和故障安全插件。我所有的单元测试都使用 Surefire 运行,而我的集成测试则使用故障保护。为什么在整个项目上运行mvn verify
,它似乎执行以下操作:
- 获取下一个要运行的模块(基于依赖关系图)
- 执行该模块的完整生命周期(初始化、编译、测试、集成测试……)
- 重复直到不再有模块
这是一个非常缓慢的过程,我觉得如果执行以下操作会更快:
- 编译所有模块
- 对所有模块运行单元测试
- 对所有模块运行集成测试
有效地做类似的事情:
- 执行所有模块的当前阶段
- 进入下一阶段,重复
但是我不知道如何设置。这可能吗?或者我的假设是这可能会更快?感谢您的帮助。
最佳答案
你不能这样做,请考虑以下结构
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/