【问题标题】:Maven multi module project lifecycleMaven 多模块项目生命周期
【发布时间】:2014-04-18 20:26:21
【问题描述】:

我有一个大型的多模块 maven 项目,并且正在使用编译器、surefire 和故障安全插件。我所有的单元测试都使用surefire运行,我的集成测试使用failsafe。为什么在整个项目上运行mvn verify,它似乎做了以下事情:

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

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

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

有效地做类似的事情:

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

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

【问题讨论】:

    标签: java maven build


    【解决方案1】:

    你不能那样做,考虑下面的结构

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

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

    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

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

    【讨论】:

      猜你喜欢
      • 2016-12-31
      • 1970-01-01
      • 2011-07-31
      • 2023-04-10
      • 2015-05-19
      • 1970-01-01
      • 2013-05-28
      • 2018-08-03
      • 1970-01-01
      相关资源
      最近更新 更多