繁体   English   中英

Maven多模块项目生命周期

[英]Maven multi module project lifecycle

我有一个大型的多模块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{
 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并不真正支持增量构建, 请参见此处的公开请求

如果您只想测试构建生命周期中的执行情况,则可以使用单独的构建配置文件进行操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM