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
- Maven学习笔记4-聚合与继承
- maven笔记4--聚合与继承
- Maven学习笔记(七):聚合与继承
- Maven学习笔记(四)--聚合与继承
- Maven聚合与继承
- Maven聚合与继承
- Maven聚合与继承
- Maven聚合与继承
- Maven聚合与继承
- Maven 聚合与继承
- Maven聚合与继承
- maven聚合与继承
- Maven聚合与继承
- Maven聚合与继承
- Maven聚合与继承
- maven聚合与继承
- Maven -- 聚合与继承
- Maven聚合与继承
- scala 提取器
- 算法导论——队列
- JMS学习一(JMS介绍)
- 2.15
- python数据挖掘数据分析pandas的介绍及简单例子
- maven笔记4--聚合与继承
- MatConvNet的CPU和GPU编译配置
- gc 垃圾回收
- .Net程序员学用Oracle系列(15):DUAL、ROWID、NULL
- Spring Security 4 Security View Fragments Example(3)
- mysql jar包下载
- LeetCode171 Excel Sheet Column Number
- Project Euler 010 Summation of primes
- C#字符串连接Null时的一个小坑