2014-03-13 73 views
1

我有一个大的多模块maven项目,并使用编译器,surefire和failsafe插件。我所有的单元测试都运行良好,我的集成测试具有故障安全性。为什么在整个项目运行mvn verify,它似乎做到以下几点:Maven多模块项目生命周期

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

这是一个非常缓慢的过程,我觉得这将是更快,如果它做了以下内容:

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

有效地做这样的事情

  • 运行集成测试:

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

    但是我无法弄清楚如何设置它。这可能吗?或者我的假设是这可能会更快?谢谢您的帮助。

  • 回答

    1

    你不能做到这一点,可以考虑以下结构

    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现在会发现不同的方法签名

    什么是有效这里增量编译,但是行家并不完全支持增量构建在真正意义上,see here is the open request for that如果你想

    只是测试执行从构建生命周期saperate你可以使用独立的构建资料