maven笔记4--聚合与继承

来源:互联网 发布:java修改全局变量 编辑:程序博客网 时间:2024/05/23 12:58

前言:

maven的聚合特性能把项目的各个模块聚合在一起构建,maven的继承特性则能帮助抽取各个模块相同的依赖和插件等配置,在简化POM的同时还成促进各个模块配置的一致性。

测试类的包名结构和实际代码保持一致,测试类中不测试实现,只测试接口,也就是说测试代码不能引用实现类。

聚合:快速构建项目
继承:消除重复配置

聚合

方便一次构建聚合项目下的各个子模块。
打包方式为pom,仅仅是帮助聚合其他模块构建的工具,本身并无实质的内容。

当在聚合模块执行mvn命令时,首先会解析聚合模块的POM,分析要构建的模块,并计算出一个反应堆构建顺序(Reactor Build Order),然后根据这个顺序依次构建各个模块。

继承

父工程打包类型也必须为pom。父模块只是为了帮助消除配置的重复,因此它本身不包含除POM之外的项目文件,也就不需要src/main/java/之类的文件夹了。

relativePath  表示父模块POM的相对路径。maven首先根据relativePath检查父POM,如果找不到,再从本地仓库查找。relativePath的默认值是../pom.xml。即maven中默认父pom是在上一层目录下


可继承的POM元素

  • groupId:项目组ID
  • version:项目版本
  • description:项目描述信息
  • organization:项目组织信息
  • inceptionYear:项目创世年份
  • url:项目URL地址
  • developers:项目开发者信息
  • contributors:项目贡献者信息
  • distributionManagement:项目部署配置
  • issueManagement:项目缺陷跟踪系统信息
  • ciManagement:项目持续集成系统信息
  • scm:项目版本控制系统信息
  • mailingLists:邮件列表信息
  • properites:自定义的Maven属性
  • dependencies:项目依赖配置
  • dependencyManagement:依赖管理配置
  • repositories:仓库配置
  • build:源码目录配置,输出目录配置,插件配置,插件管理配置等
  • reporting:项目报告输出目录配置,报告插件配置等

依赖管理

由于dependencies元素可继承,所以可以提取公共的项目依赖到父模块中。
dependencyManagement元素既能让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性。
dependencyManagement元素下的依赖声明不会引入实际的依赖,但它能约束dependencies下的依赖使用。

引入其他pom的dependencyManagement合并到当前pom中。配置如下:
在parent的pom.xml配置文件中加上如下配置,import依赖范围只在dependencyManagement下有效

插件管理

pluginManagement
该元素中配置的依赖不会造成实际的插件调用行为,当POM中配置了真正的plugin元素,并且和pluginManagement中配置的插件匹配时,pluginManagement的配置才会影响实际的插件行为。

当多个模块引用相同的插件配置时,就将插件配置到父POM的pluginManagement中进行管理(统一声明插件的版本),子插件在引用时,不需要配置版本等信息。

聚合与集成的关系

聚合:快速构建项目
继承:消除重复配置
Convention Over Configuration:约定优于配置
maven默认规定:
  • 源码目录         src/main/java
  • 编译输出目录  target/classes/
  • 打包方式         jar
  • 包输出目录      target/
也可自定义源码路径:(极度不建议),在build下配置


超级POM:任何一个Maven项目都隐式地继承自该POM,类似Java的Object类
超级POM路径:$MAVEN_HOME/lib/maven-model-builder-x.x.x.jar中的  org/apache/maven/model/pom-4.0.0.xml

默认配置了仓库和插件仓库的地址,都是中央仓库且都关闭了对SNAPSHOT的支持。

也定义了maven项目的详细信息
主输出目录,主代码输出目录,最终构建的名称,测试代码输出目录,主源代码目录,脚本源代码目录,测试代码目录,主资源目录和测试资源目录

为核心插件设定版本

反应堆

在多模块Maven项目中,反应堆(Reactor)指所有模块组成的一个构建结构。包含了各个模块间的继承和依赖关系。
单模块项目,反应堆就是该模块本身。

反应堆的构建顺序

maven按顺序读取POM,如果POM没有依赖模块,就构建该模块,否则就先构建依赖的模块,依次类推。模块间的依赖关系会将反应堆构成一个有向非循环图(Directed  Acyclic Graph,DAG),即依赖关系不允许出现循环

裁剪反应堆

如果我们只需要构建完整反应堆中的某些个模块,就需要使用下面这些mvn命令
  • -am       also  make                                 同时构建所列模块的依赖模块
  • -amd     also  make  dependents            同时构建依赖于所列模块的模块
  • -pl         projects<arg>                             构建指定的模块,模块间用逗号分隔
  • -rf          resume  from<arg>                    从定制模块恢复反应堆
例子:
  • -pl      从聚合模块上只构建指定的模块  

clean install -DskipTests=true -pl hlp-ubp-facade,hlp-ubp-service

  • -am    同时构建所列模块的依赖模块,hlp-ubp,hlp-ubp-facade都会被构建    -am

clean install -DskipTests=true -pl hlp-ubp-facade –am

  • -amd   同时构建依赖于所列模块的模块,hlp-ubp-service,hlp-ubp-web模块都被构建了

clean install -DskipTests=true -pl hlp-ubp-facade –amd



  • 原来反应堆的构建顺序 

  • -rf     指定从反应堆的哪个模块开始构建

clean install -DskipTests=true -rf hlp-ubp-frontweb


0 0
原创粉丝点击