Maven简单入门(三)

关于继承与聚合

Posted by YD Blog on November 9, 2022

Maven简单入门(三)

聚合

  • 聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合
  • 聚合工程:通常是一个不具有业务功能的“空”工程(有且仅有一个pom文件)
  • 作用:使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
    • 当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题
  • 聚合工程的使用
    • 创建空工程作为聚合工程
    • 将聚合工程的打包方式设置成pom
    • 在聚合工程的pom文件中添加<modules>子标签,在其中通过<module>标签标注需要管理的模块相对路径
    • 当需要对项目进行更新时在聚合项目中运行Maven的compile脚本即可

注意:相对路径中使用..表示返回项目的上一级目录

当运行聚合项目中的compile脚本时,Maven会根据modules子标签中项目的依赖关系的顺序进行项目的更新构建

继承

  • 概念:继承描述的时两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承
  • 作用:
    • 简化配置
    • 减少版本冲突

通常继承用工程和聚合工程会使用同一个工程。

  • 继承的使用
    • 在父工程中将打包方式设置为pom
    • 在需要继承的子工程中加入<parent>标签
    • parent标签中加入gav子标签注明父工程坐标
    • parent标签中加入<relativePath>标签注明父工程路径
    • 在父工程的<dependencies>标签中添加子工程公用依赖
    • 在父工程的<dependencyManagement>标签中添加子工程可选依赖
    • 在子工程的<dependencies>标签中使用可选依赖时仅标注组名和id,不标注版本即可

聚合与继承的区别

  • 作用:
    • 聚合用于快速构建项目
    • 继承用于快速配置
  • 相同点:
    • 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

属性

  • 为了在父工程中方便的进行统一的版本管理避免出错,可以使用属性
  • 在pom文件中添加<properties>标签
  • <properties>标签中添加子标签,标签名即为属性名,标签内数据即为属性的值
  • 在需要使用的地方使用${属性名}进行引用即可

如何在资源文件中引用pom文件中定义的属性

  • 定义属性
  • 在资源文件中使用形如${属性名}的方式引用属性
  • 开启资源文件目录加载属性的过滤器
<build>
  <resources>
    <directory>${project.basedir}/src/main/resources</directory>
    <filtering>true<filtering>
  </resources>
</build>

其他属性

  • 属性列表
    • 自定义属性
    • 内置属性
    • Setting属性
    • Java系统属性
    • 环境变量属性

之前使用的${project.basedir}就是maven的内置属性,表示项目根目录

可以在maven安装路径运行mvn help:system指令查看Java系统属性和环境变量属性。

版本管理

  • 工程版本:
    • SNAPSHOT(快照版本)
      • 项目开发过程中灵使输出的版本,称为快照版本
      • 快照版本会随着开发的进展不断更新
    • RELEASE(发布版本)
      • 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构建文件是稳定的,即便进行功能的后续开发,也不会该百年当前发布版本的内容,这种版本称为发布版本
  • 发布版本
    • alpha版
    • beta版
    • 纯数字版