Lecture12 实验07:聚合

文章目录

    [toc]

    单词词性音标含义
    modulesn. (复数)/ˈmɒdjuːlz/模块集合(Maven多模块项目中,<modules>标签用于声明当前项目包含的子模块,如<modules><module>module-a</module></modules>,指定子模块目录)
    modulen./ˈmɒdjuːl/模块(Maven中表示一个独立的子项目,可单独构建,也可作为父项目的一部分,通过<module>标签在父POM中声明)
    reactorn./riˈæktə(r)/反应器(Maven术语,指多模块项目构建时的执行顺序管理器,按模块依赖关系自动排序构建流程,确保依赖模块先于使用模块构建)
    containv./kənˈteɪn/包含;容纳(编程中表示一个组件包含其他组件,Maven中如父项目contain多个子模块,或集合contain元素)
    cyclicadj./ˈsaɪklɪk/循环的(编程中常指cyclic reference,即模块间相互依赖形成闭环,如A依赖B,B又依赖A,Maven会报错无法构建)
    referencen. / v./ˈrefrəns/引用(编程中表示一个模块对另一个模块的依赖引用,cyclic reference即循环引用,会导致构建或运行错误)

    Lecture12 实验07:聚合

    1、聚合本身的含义

    部分组成整体

    ./images

    动画片《战神金刚》中的经典台词:“我来组成头部!我来组成手臂!”就是聚合关系最生动的体现。


    2、Maven 中的聚合

    使用一个“总工程”将各个“模块工程”汇集起来,作为一个整体对应完整的项目。

    • 项目:整体
    • 模块:部分

    概念的对应关系:

    从继承关系角度来看:

    • 父工程
    • 子工程

    从聚合关系角度来看:

    • 总工程
    • 模块工程

    3、好处

    • 一键执行 Maven 命令:很多构建命令都可以在“总工程”中一键执行。

      以 mvn install 命令为例:Maven 要求有父工程时先安装父工程;有依赖的工程时,先安装被依赖的工程。我们自己考虑这些规则会很麻烦。但是工程聚合之后,在总工程执行 mvn install 可以一键完成安装,而且会自动按照正确的顺序执行。

    • 配置聚合之后,各个模块工程会在总工程中展示一个列表,让项目中的各个模块一目了然。


    4、聚合的配置

    在总工程中配置 modules 即可:

    	<modules>  
    		<module>pro04-maven-module</module>
    		<module>pro05-maven-module</module>
    		<module>pro06-maven-module</module>
    	</modules>
    

    5、依赖循环问题

    如果 A 工程依赖 B 工程,B 工程依赖 C 工程,C 工程又反过来依赖 A 工程,那么在执行构建操作时会报下面的错误:

    [ERROR] [ERROR] The projects in the reactor contain a cyclic reference:

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


    6、Maven使用中常见故障排除

    ①ClassNotFound

    明明已经导入了依赖,但是程序运行时抛出ClassNotFound异常,告诉我们某个类找不到,而这个类明明就在我们引入的依赖中

    造成这样的问题,有可能是下载过程中,jar包内部丢失数据

    解决办法:到本地仓库中把对应的 jar 包删除,让Maven重新下载

    • 如何到本地仓库找到 jar 包的位置?通过 jar 包的坐标来找
    • 如何让 Maven 重新下载?如下图所示:

    image-20250724112057584 注:要想更准确,可以先对 jar 包文件执行 SHA1 计算,对比 SHA1 文件看是否一致

    • 一致:说明 jar 包本身是正确的
    • 不一致:说明 jar 包确实下载失败,需要重新下载

    ②lastUpadted问题

    Maven 下载 jar 包时,正在下载过程中的 jar 包扩展名是:lastUpdated

    如果下载成功,那么就会把lastUpadted去掉,恢复成正确的扩展名

    但是如果下载一半儿的时候断网了,lastUpadted扩展名就不会被去掉

    image-20250724112317623

    如果某个jar包保留lastUpadted扩展名,下次Maven就不会继续下载这个没完成的jar包了

    所以需要手动删除这些下载失败的jar包


    ③莫名其妙的问题

    • 确保Project是存放在非中文、没有空格的目录下

    • 在Project级别(聚合工程这里)执行 mvn clean install 命令

      • 好处1:确保所有被依赖的module都安装到本地库,这里的module说的是我们自己开发的
      • 好处2:所有依赖的jar包都执行下载
      • 好处3:检查Project中所有Maven工程的pom.xml
    • 如果看到下面结果,证明:

      • 1、Java代码全部能够通过编译
      • 2、所有Maven工程的pom.xml配置全部正确
      • 3、IDEA 中所有针对 pom.xml 的报错都是误报

    image-20250724112840902

    • 如果此时运行程序,还是抛异常,那可以尝试:
      • IDEA 重新构建:build菜单---->Rebuild Project
      • IDEA 清理缓存并验证重启:File 菜单

    image-20250724113117982


    在下图中点击 Invalidate and Restart:

    image-20250724113148906

    end