本文已参与「新人创作礼」活动,一起开启掘金创作之路。
补充内容:依赖的排除
当A同时依赖B和C,而B和C又依赖相同jar包的不同版本时,可能会发生冲突,所以我们这时就要进行排除操作,在A依赖B处做个阻断
<exclusions>
<!-- 配置具体的排除信息,让commons-logging不要传递到当前工程(pro02-maven-web) -->
<exclusion>
<!-- 这里指定坐标的时候不需要指定version -->
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
注:exclusions标签要写在dependency标签下,和对应工程的坐标配置信息同级,用来表示截断的是哪个依赖工程,所以这里我们不需要写version。
*也可以用 来表示全部隔断
聚合
聚合本身的含义
”部分组成整体“
maven中的聚合
使用一个”总工程“将各个”模块工程“汇集起来,作为一个整体对应完整的项目。
- 项目:整体
- 模块:部分
概念对应的关系:
从继承关系角度来看:
- 父工程
- 子工程
从聚合关系角度来看:
- 总工程
- 模块工程
好处
一键执行maven命令:很多构建命令都可以在”总工程“中一键执行。
以mvn install命令为例:maven要求有父工程时先安装父工程;有依赖的工程时,先安装被依赖的工程。我们自己考虑这些规则会很麻烦。但是工程聚合之后,在总工程执行mvn install可以一键完成安装,而且会自动按照正确的顺序执行。
配置聚合后,各个模块工程会在总工程中展示一个列表,让项目中的各个模块一目了然。
聚合的配置
在总工程中配置modules即可:
<modules>
<module>pro04-maven-module</module>
<module>pro05-maven-module</module>
<module>pro06-maven-module</module>
</modules>
依赖循环问题
如果A工程依赖B工程,B工程依赖C工程,C工程又反过来依赖A工程,那么在执行构建时会报下面的错误:
:::danger
[ERROR] [ERROR] The projects in the reactor contain a cyclic reference:
:::
这个错误的含义是:循环引用