• Maven 的聚合(多模块)和 Parent 继承


    即使是长期从事 Maven 工作的开发人员也不能完全掌握聚合(多模块)和 Parent 继承的关系,在使用多模块时,子模块总要指定聚合的 pom 为 。由于在大多数示例中都是这么写的,所以很难让人搞懂这两者的具体作用和关系。

    实际上在 Maven 中聚合(多模块)和继承是两回事,两者不存在直接联系。

    pom文档地址:https://maven.apache.org/pom.html

    Maven 完全参考:http://books.sonatype.com/mvnref-book/reference/index.html

    继承

    继承是 Maven 中很强大的一种功能,继承可以使得子POM可以获得 parent 中的各项配置,可以对子pom进行统一的配置和依赖管理。父POM中的大多数元素都能被子POM继承,这些元素包含:

    • groupId
    • version
    • description
    • url
    • inceptionYear
    • organization
    • licenses
    • developers
    • contributors
    • mailingLists
    • scm
    • issueManagement
    • ciManagement
    • properties
    • dependencyManagement
    • dependencies
    • repositories
    • pluginRepositories
    • build
      • plugin executions with matching ids
      • plugin configuration
      • etc.
    • reporting
    • profiles

    注意下面的元素,这些都是不能被继承的。

    • artifactId
    • name
    • prerequisites

    想要添加 parent,只需要像下面这样写。

    
      4.0.0
    
      
        org.codehaus.mojo
        my-parent
        2.0
        ../my-parent
      
    
      my-project
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    其中relativePath元素不是必须的,指定后会优先从指定的位置查找父pom。

    聚合(或多模块)

    具有模块的项目被称为多模块或聚合项目。模块是此POM列出并作为一组执行的项目。通过一个pom打包的项目可以将它们列为模块来聚合成一组项目进行构建,这些模块名是这些项目的相对目录。

    
      4.0.0
    
      org.codehaus.mojo
      my-parent
      2.0
      pom
    
      
        my-project
        another-project
      
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在列出模块时,不需要自己考虑模块间依赖关系,即POM给出的模块排序并不重要。Maven将对模块进行拓扑排序,使得依赖关系始终在依赖模块之前构建。

    聚合 VS 父POM

    虽然聚合通常伴随着父POM的继承关系,但是这两者不是必须同时存在的,从上面两者的介绍可以看出来,这两者的都有不同的作用,他们的作用不依赖于另一个的配置。

    父POM是为了抽取统一的配置信息和依赖版本控制,方便子POM直接引用,简化子POM的配置。聚合(多模块)则是为了方便一组项目进行统一的操作而作为一个大的整体,所以要真正根据这两者不同的作用来使用,不必为了聚合而继承同一个父POM,也不比为了继承父POM而设计成多模块。

  • 相关阅读:
    价格监测,怎样才算全覆盖
    嵌入式分享合集52
    重定向和转发
    (三)线性判别式分析LDA
    组合控件——顶部导航栏——工具栏Toolbar
    前端canvas项目实战——在线图文编辑器(九):逻辑画布
    Nacos - Nacos与Eureka区别
    VVC 预测值写入TXT文件(xCheckModeSplit()函数未写完)
    SSM-使用@Async和创建ThreadPoolTaskExecutor线程池
    跟着Datawhale重学数据结构与算法(3)---排序算法
  • 原文地址:https://blog.csdn.net/m0_67401920/article/details/126435168