• Maven实战(九)---模块聚合和继承


                类之间有聚合和继承关系,Maven也具备这种设计原则。

    那么Mavenpom是怎样进行聚合与继承的呢?

     

    一、什么是聚合?为什么要用聚合?

           上一篇博客介绍了模块化的基本知识。

    有了模块化,那么我们项目中会有非常多模块,每一个模块都是独立的maven project,假设项目不大,我们还能够独立的编译測试执行每一个模块,可是随着项目越来越大,我们不得不想办法让我们的工作变得简单,这时就出现了Maven聚合的方式来完毕编译全部模块。

           聚合:把多个模块或项目聚合到一期。我们能够建立一个专门负责聚合工作的project.

            Maven聚合:当我们的模块许多的时候,我们想要一次构建多个项目。而不是到多个模块的文件夹下分别运行命令。Maven的聚合特性就是为该需求服务的。

     

    Pom.xml

    <parent>
    		<groupId>com.tgb</groupId>
    		<artifactId>itoo-root</artifactId>
    		<version>0.0.1-SNAPSHOT</version>
    		<!-- 继承itoo-root的pom文件 -->
    		<relativePath>../itoo-root/pom.xml</relativePath>
    	</parent>
    
    	<artifactId>itoo-basic-parent</artifactId>
    	<packaging>pom</packaging>
    	<modules>
    		<module>../itoo-basic-api</module>
    		<module>../itoo-basic-institution-core</module>
    		<module>../itoo-basic-institution-web</module>
    		<module>../itoo-basic-institution-ear</module>
    	</modules>

     

    Maven约定:

    1、首先聚合模块必须为pom。否则无法构建

    2、必须有<modules>元素,它是实现聚合的最核心配置。这里能够声明多个module元素。

    每一个module的值都是一个当前pom的相对文件夹。

    模块所处的文件夹必须和<module>模块所处的文件夹一致。

    3、为了方便用户构建项目,通常将聚合模块放在项目文件夹的最顶层,其它模块则作为聚合模块的子文件夹存在。

    4、聚合模块的pom没有实质性内容。仅仅有一个pom.xml文件。仅仅是用来帮助其它模块构建的工具。

     

    maven构建:

             maven首先解析聚合模块pom、分析要构建的模块、并计算出一个反应堆构建顺序,然后依据这个顺序依次构建各个模块。

    反应堆是全部模块组成的一个构建结构。


     

    二、继承

               Maven继承也是为了防止反复,让项目的jar包版本号一致,在项目管理上起了非常大的作用。

    比方说同样的jar包我们每一个人都须要依赖一遍,而且每一个人引用的版本不同。势必造成项目混乱,执行出问题。

    1、子模块省略grouopIdversion,都会从父模块依赖下来。

    2、子模块元素pom.xml

    <parent>
    		<groupId>com.tgb</groupId>
    		<artifactId>itoo-root</artifactId>
    		<version>0.0.1-SNAPSHOT</version>
    		<!-- 继承itoo-root的pom文件 -->
    		<relativePath>../itoo-root/pom.xml</relativePath>
    	</parent>

     

           随之而来的问题。假设我创建了一个模块不须要依赖父类的依赖。这时候我们须要用Maven的依赖管理来解决问题。即dependencyManagement。见

    Maven实战(六)---dependencies与dependencyManagement的差别

     

     

    三、总结

              对于聚合模块来说,它知道有哪些被聚合的模块,而对于被聚合的模块来说。它们不知道被谁聚合了。也不知道它的存在;对于继承关系的pom来说,它不知道被哪些模块继承了,对于子pom来说。它必须知道要继承谁。


     

            总之,聚合是为了方便高速构建项目,继承是为了消除反复配置。在简化pom的同一时候还能促进各个模块配置的一致性。共同点是两者的packaging都是pom,聚合模块与继承关系中的父模块除了pom之外都没有实际内容。

     

           实际项目中我们会发现。一个pom既是聚合pom,也是父pom,这么做主要是为了方便。

     

               Java成功的重要原因之中的一个就是他可以屏蔽大部分操作系统的差异,XML流行的原因之中的一个是全部语言都接受他。Maven用的人越来越多是Maven提倡约定优于配置,这是Maven最核心的设计理念之中的一个。

  • 相关阅读:
    截图片
    C#根据字节数截取字符串
    学习ObjectiveC: 入门教程
    [原]32位libusb
    [转]vim下鼠标右键无法复制的解决
    [原]c语言问号表达式
    [转]Linux下的帧缓冲lcd应用编程及Framebuffer驱动程序模型
    [转] android移植详解
    [转]Linux 串口编程
    curl 使用代理
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6694939.html
Copyright © 2020-2023  润新知