聚合,补充依赖的聚合内容

72 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

补充内容:依赖的排除

当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:
:::
​

这个错误的含义是:循环引用