Maven 模块直接存在类似 Java 语言的聚合与继承关系. 通过依赖和插件管理的可以更好的简化 Maven 的配置.并且通过这两个特性编写出更新简洁完善的 Maven 测试案例.
聚合与继承
聚合
通过创建一个新的聚合模块, 可用通过该模块构建整个项目的所有模块
继承
作为父模块的POM, 必须 packaging 必须定义为 pom
继承父模块的子模块POM
1234567891011121314151617181920212223242526<project><!-- 声明父模块 --><parent><groupId>com.dlc.maven</groupId><artifactId>dlc-parent</artifactId><version>1.0.0-SNAPSHOT</version><!--非必须 父模块 POM 的相对路径relativePath 默认值是 ../pom.xml--><relativePath></relativePath></parent><artifactId>dlc-subModule</artifactId><name>SubModule</name><dependencies>...</dependencies><build><plugins>...</plugins></build></project>可继承的 POM 元素
- groupId
- version
- description
- organization: 项目的组织信息
- inceptionYear: 项目的创建年限
- url: 项目 URL 地址
- developers: 项目开发者信息
- contributors: 项目贡献者信息
- distributionManagement: 项目部署配置
- issueManagement: 项目的缺陷跟踪系统信息
- ciManagement: 项目持续集成系统信息
- scm: 项目的版本控制系统信息
- mailingLists: 项目邮件列表信息
- properties: 自定义的 Maven 属性
- dependencies
- dependencyManagement: 项目的依赖管理配置
- repositories: 项目的仓库配置
- build: 包括项目的源码目录配置, 输出目录配置, 插件配置, 插件管理配置等.
- reporting: 包括项目的报告的输出目录配置, 报告插件配置等.
依赖和插件管理
|
|
子 POM 可以从父 POM 中继承 dependencyManagement, 子 POM 配置的依赖如果是属于父类的 dependencyManagement, 由于继承的关系, 在子 POM 中引用可以直接省略 version 和 scope.
插件管理 pluginManagement, 原理同上.
|
|
反应堆
在一个多模块的Maven项目中, 反应堆 (Reactor) 是指所有模块的一个构建结构. 对于单模块的项目, Reactor就是该模块本身, 但对于多模块的项目, 反应堆包含了各个模块直接的继承与依赖关系, 从而 Maven 可以自动计算出合理的模块构建顺序.
一个 Reactor的构建顺序为: Maven 按顺序读取 POM, 如果该 POM 没有依赖模块, 那么就构建该模块, 否则就会先构建该模块的, 如果该模块还依赖其他模块,则先构建该模块.
如果值需要构建项目中的一个模块, 可以通过裁剪 Reactor 来实现
|
|
Maven测试
maven-surefire-plugin
此插件是与 default生命周期的 test阶段绑定的, 是Maven内置绑定.
maven-surefire-plugin会自动执行 Maven 测试路径(默认 src/test/java/)下的所有符合以下一组命名模式的测试类. 模式为:
**/Test*.java**/*Test.java**/*TestCase.java
跳过测试
|
|
OR
|
|
动态指定运行的测试用例
|
|
包含与排除测试用例
|
|
测试报告
基本测试报告
默认情况下, maven-surefire-plugin 会在项目的 target/surefire-reports 目录下生成两种格式的错误报告:
- 简单文本格式
- 与JUnit 兼容的XML格式
测试覆盖率报告
使用 Cobertura, Maven 通过 cobertura-maven-plugin 与之集成.1mvn cobertura:cobertura会在项目目录 target/site/cobertrua/生成HTML格式的报告.