1. POM文件
每个Maven工程中都会有一个pom配置文件,它全称 Project Object Model。pom是一个xml文件, 是maven工作的基础, 在执行goal时, maven会去项目根目录下读取pom.xml获得需要的配置信息pom文件中包含了项目的信息和maven build项目所需的配置信息, 通常有项目信息(如版本、 成员)、 项目的依赖、 插件和goal、 build选项等等pom是可以继承的,通常对于一个大型的项目或是多个module的情况, 子模块的pom需要指定父模块的pom。
可以说我们使用maven进行项目管理实际上就是在跟pom文件打交道。
2. 构件(artifact)
构建就是一个项目将要产生的文件, 可以是jar文件, 源文件, 二进制文件, war文件, 甚至是pom文件。
每个artifact都由groupId:artifactId:version组成的标识符唯一识别。 需要被使用(依赖)的artifact都要放在maven仓库中。artifact的标识也成为构建的坐标, groupId通常使用创建构件的组织名称或者域名的反转(比如: org.springframework) ; artifactId是构件的名称, 通常在一个组织创建的构件中是唯一的(比如: spring-core) ; version就比较好理解了, 构件的版本信息, 随着构件的升级版本号依次升级(比如:4.0.9.RELEASE),看下面的例子:
- 同一个构件的不同版本:
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.9.RELEASE</version>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.0.RELEASE</version>
- 不同构件:
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.6.2</version>
3. 仓库(repositories)
maven仓库可以分为本地库(local) 和远程库(remote)。用于存储maven项目的一块空间。
本地库通常位于本机的~/.m2/repository文件夹(可以通过settings.xml中的localRepository进行修改),本地仓库每个安装了maven的用户都有,存放着用户的maven工程以及工程的依赖工程文件。
远程库最常见的是maven中央库, 此外也会有一些私服库用于企业内部。国内常用的仓库列表。
4. 构建生命周期(Build Lifecycle)
maven将工程(Project) 的构建过程理解为不同的生命周期(LifeCycle)和阶段(Phase)。 在工程的构建过程中, 存在着不同的生命周期, 这些生命周期互相独立, 之间也没有一定的顺序关系。 每个生命周期又划分为不同的阶段(Phase) 。 阶段之间有明确的顺序关系, 同一生命周期内的阶段必须按顺序依次
执行。
maven内置了三个生命周期, 并为每个生命周期内置了一些阶段。 下面列举出maven内置的生命周期及主要的阶段:
1. default: 构建(Build)
- validate: 验证项目是否正确, 所有必需的信息是否可用。
- compile: 编译项目中的代码。
test: 用相关的单元测试框架测试编译后的代码, 这些运行的测试并不会随项目打包和布署。
package: 将编译后的代码打包成相应的格式文件, 如jar包。
integration-test: 如果需要在一个综合环境中运行我们的测试, 这个阶段将会运行和布署项目到该环境中。
verify: 检查项目的包是否正确和符合要求。
- install: 将包安装到本地maven仓库, 可以让其他项目作为依赖使用该包。
- deploy: 将包发布到远程的maven仓库, 并提供给其他开发者使用。
2. clean: 清理
- pre-clean 准备清理
- clean 执行清理工作
- post-clean 执行清理后的后续工作
3. site: 生成项目文档和站点
- pre-site 准备生成
- site 生成项目站点和文档
- post-site 执行生成文档后的后续工作
- site-deploy 发布项目文档
5. 目标(goal)和插件(plugin)
上面介绍的都是maven的各种概念,而具体实现由各种插件(Plugin)进行实现。插件实现的功能叫做目标(goal),一个插件可以实现一个或多个目标。
maven可以规定使用实现目标的插件,还可以通过配置pom文件来决定在哪个阶段执行(Execution)哪些目标操作。 甚至可以把一个Goal绑定到多个Phase, 以实现复用。
maven内置了一些默认的插件,并根据不同的工程packing类型在各个phase中默认绑定了一些goal。 下表中列出default生命周期中各阶段默认绑定的goal: