聚合:对于聚合模块来说,它知道有哪些被聚合的模块,而对于被聚合的模块来说,它们不知道被谁聚合了,也不知道它的存在;

继承:对于继承关系的父POM来说,它不知道自己被哪些子模块继承了,对于子POM来说,它必须知道自己的父POM是谁;

在一些最佳实践中我们会发现:一个POM既是聚合POM,又是父POM,这么做主要是为了方便。

链接:https://www.cnblogs.com/sxpy-lj/p/7251418.html

一、继承

为了避免重复。通过继承拥有Parent项目中的配置。

https://www.cnblogs.com/xdp-gacl/p/4058008.html

<!--子工程POM   继承父工程-->    
<parent>    
    <artifactId>父artifactId</artifactId>    
    <groupId>父groupId</groupId>    
    <version>父version</version>    
    <relativePath>父pom.xml的相对路径</relativePath>    
</parent>  

二、聚合

主要为了快速构建项目,可以一次构建所有子模块。

https://www.cnblogs.com/xdp-gacl/p/4058008.html

//聚合工程 POM  (module的值为子模块项目目录相对于聚合工程POM的路径)
<modules>
<module>子artifactId01</module>
   <module>子artifactId02</module>
</modules>

三、解决多个子模块依赖某个子模块的版本统一的问题

  如果一个项目有多个子模块,而且每个模块都需要引入依赖,但为了项目的正确运行,必须让所有的子项目(以下子项目即指子模块)使用依赖项的版本统一,才能保证测试的和发布的是相同的结果。

  Maven 使用 dependencyManagement 来统一模块间的依赖版本问题。

  子模块中引用一个依赖而不用显式列出版本号,Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在dependencyManagement元素中指定的版本号。

// 聚合工程 (同时也是父工程)
// 以下两个 子模块依赖的 javaee-api 版本均为 ${javaee-api.version}
<groupId>父groupId</groupId>
<artifactId>父artifactId</artifactId>
<version>父version</version>
<packaging>pom</packaging> <modules>
<module>子artifactId01</module>
   <module>子artifactId02</module>
</modules> <dependencyManagement>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${javaee-api.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
// 子模块01 

<!--继承父工程-->
<parent>
<artifactId>父artifactId</artifactId>
<groupId>父groupId</groupId>
<version>父version</version>
<relativePath>父pom.xml的相对路径</relativePath>
</parent> <groupId>子groupId01</groupId>
<artifactId>子artifactId01</artifactId>
<packaging>jar</packaging> <!--依赖关系-->
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
</dependency>
</dependencies>
// 子模块02 

<!--继承父工程-->
<parent>
<artifactId>父artifactId</artifactId>
<groupId>父groupId</groupId>
<version>父version</version>
<relativePath>父pom.xml的相对路径</relativePath>
</parent> <groupId>子groupId02</groupId>
<artifactId>子artifactId02</artifactId>
<packaging>jar</packaging> <!--依赖关系-->
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
</dependency>
</dependencies>

https://blog.csdn.net/qq_39940205/article/details/80307795

  • dependencyManagement 特性

https://blog.csdn.net/wanghantong/article/details/36427411

在dependencyManagement中配置的元素既不会给parent引入依赖,也不会给它的子模块引入依赖,仅仅是它的配置是可继承的

011.maven 继承与聚合的更多相关文章

  1. Maven——继承和聚合

    实际项目中,可能正要构建一个大型的系统,但又不想一遍又一遍的重复同样的依赖元素,这种情况是经常出现的.不过还好,maven提供了继承机制,项目可以通过parent元素使用继承,可以避免这种重复.当一个 ...

  2. Java-Maven(七):Eclipse中Maven依赖、聚合、继承特性

    之前通过学习了解,maven集成到eclipse中的如何创建项目,以及maven命令插件在eclipse中安装后的用法.那么接下来我们将会学习一些maven在项目中的一些特性,及如何使用. Maven ...

  3. maven项目的聚合与继承

    maven项目的聚合与继承: 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模 ...

  4. maven 继承关系和聚合

    maven继承管理 让版本的管理只在一个地方改变 modules用于聚合,把执行的项目都放到同一的地方用module包括,可以省去一个个项目去mvn install,这样可以所有项目一次聚合 mvn ...

  5. Maven的继承和聚合

    Maven的继承和聚合子项目的pom文件里通过<parent>节点来继承父项目 <parent> <groupId>com.tykj</groupId> ...

  6. maven pom继承与聚合

    一.POM聚合模块: 在分布式架构,分模块化开发中,每个某块可能都是一个单独的maven项目,能够独立的进行项目构架,当模块比较多时,可以使用maven聚合聚合项目来简化maven构建,一次构建多个项 ...

  7. maven中的继承和聚合的关系

    maven中的继承和聚合的关系:两者的目的是不一样的,聚合的目的是能够快速的构建项目,继承的目的是减少重复配置.聚合:定义一个聚合模块,然后在pom文件中添加<module></mo ...

  8. pom.xml的继承、聚合与依赖

    原文地址:https://my.oschina.net/zh119893/blog/232896 6.1     简介 pom.xml文件是Maven进行工作的主要配置文件.在这个文件中我们可以配置M ...

  9. pom文件继承与聚合

    1.简介 pom.xml文件是Maven进行工作的主要配置文件.在这个文件中我们可以配置Maven项目的groupId.artifactId和version等Maven项目必须的元素:可以配置Mave ...

随机推荐

  1. PHP代码篇(五)--如何将图片文件上传到另外一台服务上

    说,我有一个需求,就是一个临时功能.由于工作开发问题,我们有一个B项目,需要有一个商品添加的功能,涉及到添加商品内容,比如商品名字,商品描述,商品库存,商品图片等.后台商品添加的接口已经写完了,但是问 ...

  2. Windows Cluster失败后,AlwaysOn在残存Server节点上快速恢复DB的详细步骤

    AlwaysOn是一种集合了高可用和灾难恢复两种功能的技术,它支持一个或多个数据库整体的发生故障转移,它实现了一定程度上的负载均衡,减轻了主服务器的压力,是目前最好的一种选择.那么当极端情况发生时,集 ...

  3. linux SSH设置

    环境:centos7 一. ssh连接超时设置 (1)客户端设置(推荐) 客户端是windows系统 连接工具:SecureCRT 1.SecureCRT客户端->Options(选项)-> ...

  4. 爬虫---lxml爬取博客文章

    上一篇大概写了下lxml的用法,今天我们通过案例来实践,爬取我的博客博客并保存在本地 爬取博客园博客 爬取思路: 1.首先找到需要爬取的博客园地址 2.解析博客园地址 # coding:utf-8 i ...

  5. [转]5 种使用 Python 代码轻松实现数据可视化的方法

    数据可视化是数据科学家工作中的重要组成部分.在项目的早期阶段,你通常会进行探索性数据分析(Exploratory Data Analysis,EDA)以获取对数据的一些理解.创建可视化方法确实有助于使 ...

  6. Jenkins显示reportng测试报告

    在搭建Jenkins自动化测试平台后,我们点击立即构建就可以运行测试用例了,但没有地方查看测试报告,现在写这篇博客总结怎么在Jenkins显示reportng测试报告. 在maven项目配置repor ...

  7. jacoco统计自动化代码覆盖率

    jacoco统计自动化代码覆盖率 1. 简介 1.1. 什么是Jacoco Jacoco是一个开源的代码覆盖率工具,可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以 ...

  8. to_sql, to_csv, to_excel, to_json

    1.to_sql def to_sql(self, name, con, schema=None, if_exists="fail", index=True, index_labe ...

  9. 对CNN 的理解

    CNN 的强大之处在于它的多层结构能自动学习特征,并且可以学习到多个层次的特征:较浅的卷积层感知域较小,学习到一些局部区域的特征. 较深的卷积层具有较大的感知域,能够学习到更加抽象一些的特征.这些抽象 ...

  10. 卷积核filter和kernal的区别

    在一堆介绍卷积的帖子中,这篇特别之处在于很萌的示例配色,令人眼前一亮,当然直观也是很直观滴,保证了能在昏昏欲睡见周公子前看完. https://towardsdatascience.com/types ...