Maven概念
Maven 翻译为”专家”、”内行”,是 Apache 下的一个纯 Java 开发的开源项目。
基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。
领域
- 简化构建过程
- 提供统一的构建系统
- 提供优质的项目信息
- 鼓励更好的开发实践
仓库
Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。
运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
POM.xml
POM 中可以指定以下配置:
- 项目依赖
- 插件
- 执行目标
- 项目构建 profile
- 项目版本
- 项目开发者列表
- 相关邮件列表信息
modelVersion
指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0
groupId
类似package,公司名倒过来
artifactId
groupId下一个功能的命名,或者说是项目名
version
版本号,SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本。
结构为:主版本号.次版本号.增量版本号-<里程碑版本>
groupId、artifactId、version三个元素生成了一个Maven项目的坐标.
packaging
项目产生的构件类型,例如jar、war、ear、pom。
description
描述,通常用于版权说明
properties
定义一些变量,可以在dependency中引用
dependencyManagement
一般只出现在父pom里面,继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述group ID和 artifact ID信息),
如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID 匹配到这里的依赖,并使用这里的依赖信息。
dependency
Type
默认jar
Scope
定义在哪个阶段使用,以及会不会打到包(jar包,war包等)里面去
compile 编译(默认)
表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去
test 测试
依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit
provided
打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作
runtime
表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段
system
从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径
依赖传递
A–>B–>C。当前项目为A,A依赖于B,B依赖于C。当C是test或者provided时,C直接被丢弃,A不依赖C; 否则A依赖C
依赖仲裁
最短路径原则 A->B->C->common1.1.jar A->common1.0.jar那么A最终会依赖common1.0.jar
加载先后原则
A->B
A->C
B->common1.0.jar
C->common1.1.jar
A同时依赖B和C,那么B和C谁先加载,就依赖谁的common.jar
依赖排除
任何可传递的依赖都可以通过 “exclusion” 元素被排除在外。举例说明,A 依赖 B, B 依赖 C,因此 A 可以标记 C 为 “被排除的”
生命周期
Maven定义了三套生命周期:clean、default、site,每个生命周期都包含了一些阶段(phase)。
三套生命周期相互独立,但各个生命周期中的phase却是有顺序的,且后面的phase依赖于前面的phase。执行某个phase时,其前面的phase会依顺序执行,但不会触发另外两套生命周期中的任何phase。
clean生命周期
- pre-clean :执行清理前的工作;
- clean :清理上一次构建生成的所有文件(target);
- post-clean :执行清理后的工作
default(build)生命周期
Maven 的主要生命周期,被用于构建应用,有23 个阶段。default生命周期是最核心的,它包含了构建项目时真正需要执行的所有步骤。
- process-resources :复制和处理资源文件到target目录,准备打包;
- compile :编译项目的源代码;
- test-compile :编译测试源代码;
- test :运行测试代码;
- package :打包成jar或者war或者其他格式的分发包;
- install :将打好的包安装到本地仓库,供其他项目使用;
- deploy :将打好的包安装到远程仓库,供其他项目使用;
site生命周期
Maven Site 插件一般用来创建新的报告文档、部署站点等
- pre-site:执行一些需要在生成站点文档之前完成的工作
- site:生成项目的站点文档
- post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
- site-deploy:将生成的站点文档部署到特定的服务器上
单元测试
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。
对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。
总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一
SpringCore