maven-聚合、继承

maven-聚合、继承

起男 1,489 2020-11-26

maven-聚合、继承

聚合

maven聚合需要创建一个新的maven项目,用来管理其他的maven构件模块,新的maven项目中加入如下配置:

<modules> 
    <module>模块1</module> 
    <module>模块2</module> 
    <module>模块n</module> 
</modules> 
<package>pom</package>

新的项目中执行任何mvn命令,都会让modules中包含的所有模块执行同样的命令,而被包含的模块不需要做任何特殊的配置,正常的maven项目就行。

注意:上面的module元素,这部分是被聚合的模块pom.xml所在目录的相对路径或绝对路径

package的值必须为pom

继承

  1. 创建一个父maven构件,将依赖信息放在xml中
<dependencies> 
    <dependency>依赖的构件的坐标信息</dependency> 
    <dependency>依赖的构件的坐标信息</dependency> 
    <dependency>依赖的构件的坐标信息</dependency> 
</dependencies>
  1. 将父构件的package元素的值设置为pom
<packaging>pom</packaging>
  1. 在子构件的pom.xml引入父构件的配置
<parent> 
    <groupId>父构件groupId</groupId> 
    <artifactId>父构件artifactId</artifactId> 
    <version>父构件的版本号</version> 
    <!-- 标识父构件pom.xml相对路径,默认是../pom.xml -->
    <relativePath>父构件pom.xml路径</relativePath> 
</parent>

relativePath元素

如果父构件和目录不是父子关系,比如都位于同等级的目录或者位于更复杂的目录的时候,此时我们需要在子pom.xml的parent元素中使用relativePath原则来指定父pom.xml相对路径位置,默认../pom.xml,标识pom.xml位于子pom.xml的上一级

正确的设置relativePath是非常重要的,这个要主要,子模块中执行mvn命令时,会去找pom.xml的配置,会通过relativePath指定的路径去找,如果找不到,会尝试通过坐标在本地仓库在进行查找,如果本地找不到,会去远程仓库找,如果远程仓库也没有就会报错

可以继承的元素

元素描述
groupId项目组id
version项目版本
description项目的描述
organization项目的组织信息
inceptionYear项目的创始年份
url项目url地址
developers项目开发者信息
contributors项目贡献者信息
distributionManagement项目的部署配置信息
issueManagement项目的缺陷跟踪系统信息
ciManagement项目的持续集成系统信息
scm项目的版本控制系统信息
mailingLists项目的邮件列表信息
properties自定义的maven属性配置信息
dependencyManagement项目的依赖管理配置
repsitories项目的仓库配置
build包括项目的源码目录配置、输出目录配置、插件管理配置等信息
reporting包括项目的报告输出目录配置、报告插件配置等信息

总结

聚合主要是为了方便多模块快速构件

而继承主要是为了重用相同的配置

对于聚合来说,聚合模块是知道被聚合模块存在的,而被聚合模块是感知不到聚合模块存在

对于继承来说,父构件是感知不到子构件的存在,而子构件需要使用parent来引用父构件

两者的共同点是,聚合模块和继承中的父模块的package属性都必须是pom类型的