Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven多模块项目生命周期_Java_Maven_Build - Fatal编程技术网

Java Maven多模块项目生命周期

Java Maven多模块项目生命周期,java,maven,build,Java,Maven,Build,我有一个大型多模块maven项目,正在使用编译器、surefire和故障保护插件。我的所有单元测试都使用surefire运行,我的集成测试使用failsafe运行。为什么在整个项目上运行mvn verify,它似乎执行以下操作: 获取要运行的下一个模块(基于依赖关系图) 执行该模块的完整生命周期(初始化、编译、测试、集成测试等) 重复此步骤,直到没有更多模块 这是一个非常缓慢的过程,我觉得如果它执行以下操作,速度会更快: 编译所有模块 在所有模块上运行单元测试 在所有模块上运行集成测试 有效地做

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

  • 获取要运行的下一个模块(基于依赖关系图)
  • 执行该模块的完整生命周期(初始化、编译、测试、集成测试等)
  • 重复此步骤,直到没有更多模块
  • 这是一个非常缓慢的过程,我觉得如果它执行以下操作,速度会更快:

  • 编译所有模块
  • 在所有模块上运行单元测试
  • 在所有模块上运行集成测试
  • 有效地做一些事情,比如:

  • 对所有模块执行当前阶段
  • 进入下一阶段,重复

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

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

    A (pom)
    |
    |
    |
    |
    ------B (jar)
    |     \---C (dependency) 
    |
    |------C (jar)
    
    在这里,B依赖于C,例如,在B和C中分别有以下类

    B

    C

    现在将C类更改为

     class C {
      public void sayHello(String name){}
     }
    
    如果您在所有阶段都编译,它将从A-C-B(依赖关系图)开始,C编译良好(编译只是编译源代码并将类复制到目标/类),现在您在B上运行compile,它将编译良好,因为它将从本地maven缓存中获取B的旧版本(在那里它仍然有没有任何参数的方法)

    现在先在C上安装,在B上安装会成功

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

    这里有效的方法是增量构建,但是maven并不完全支持真正意义上的增量构建

    如果您只想从构建生命周期中执行测试,您可以使用单独的构建概要文件来执行

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