发布时间:2023-06-26 14:30
Maven之坐标和依赖_jerry_dyy的博客-CSDN博客
Maven之仓库_jerry_dyy的博客-CSDN博客
Maven之聚合与继承_jerry_dyy的博客-CSDN博客
Maven之生命周期和插件_jerry_dyy的博客-CSDN博客
聚合的目的是为了:一次构件多个项目。
对于聚合模块来说,其打包方式为pom,不需要src/main/java之类的文件。
用户可以在一个打包方式为pom的Maven项目中声明任意数量的module元素,来实现模块的聚合。这里的每个module的值都是一个当前POM的相对目录。
继承的目的是为了:消除重复的配置。
继承就是把共同的配置放在一个父模块中,父模块打包方式为pom,不需要src/main/java之类的文件。
子模块中需要声明
如果子模块与父模块的
该依赖范围通常指向一个POM,作用是将目标POM中的
聚合是为了方便快速构建项目,而继承是为了消除重复配置。
它们的相同点是:打包方式都是pom,除了pom文件之外没有其他实际的内容。
不同点:聚合是聚合模块通过module引用被聚合模块,而继承是子模块通过parent引用父模块。
实际项目中通常把聚合和继承结合起来一起使用。parent项目既是聚合模块,也是父模块。
约定:其实就是默认配置
源码目录:src/main/java/
编译输出目录:target/classes
打包方式:jar
包输出目录:target/
之所以会有这些默认配置,是因为有超级POM的存在,超级POM里面配置了这些内容。
对于Maven3,超级POM在文件$MAVEN_HOME/lib/maven-module-builder-x.x.x.jar中的org/apache/maven/model/pom-4.0.0.xml路径下。
在一个多模块的Maven项目中,反应堆是指所有模块组成的一个构建结构。对于单模块项目,反应堆就是该模块本身,但对于多模块项目来说,反应堆就包括了各个模块之间继承与依赖的关系,从而自动计算出合理的模块构建顺序。
实际的构建顺序是这样形成的:Maven按顺序读取POM,如果该POM没有依赖模块,那么就构建该模块,如果该依赖还依赖于其他模块,则进一步先构建依赖的依赖。形成一个有向非循环图(DAG)。
裁剪反应堆:如果想要构建完整反应堆的某个模块,则需要裁剪。 -am, -amd, -pl, -rf等命令可以实现裁剪。