一、概述
Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。
在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置操作都非常简单并且可复用,在创建报告、检查、构建和测试自动配置时,Maven 可以让开发者的工作变得更简单。
二、构建生命周期
构建生命周期是一组阶段的序列(sequence of phases),每个阶段定义了目标被执行的顺序。这里的阶段是生命周期的一部分。当需要在某个特定阶段之前或之后执行目标时,可以使用 pre 和 post 来定义这个目标。当 Maven 开始构建工程,会按照所定义的阶段序列的顺序执行每个阶段注册的目标。
Maven 有以下三个标准的生命周期:
- clean
- default(or build)
- site
1. Clean生命周期
Clean的主要目的是清空项目工作中产生的一些中间件,比如上次打的jar包,临时文件等。该生命周期主要用于在build生命周期之前做清理工作。它包含以下阶段:
- pre-clean:执行一些需要在clean之前完成的工作
- clean:移除所有上一次构建生成的文件
- post-clean:执行一些需要在clean之后立刻完成的工作
2. Default (or Build) 生命周期
这是 Maven 的主要生命周期,被用于构建应用,主要有23个阶段,下面主要介绍常用的几种:
阶段 | 处理 | 描述 |
---|---|---|
validate | 验证项目 | 验证项目是否正确且所有必须信息是可用的 |
compile | 执行编译 | 源代码编译在此阶段完成 |
Test | 测试 | 使用适当的单元测试框架运行测试。 |
package | 打包 | 将编译后的代码打包成需要的格式,比如JAR |
verify | 检查 | 对集成测试的结果进行检查,以保证质量达标 |
install | 安装 | 安装打包的项目到本地仓库,以供其他项目使用 |
deploy | 部署 | 将在最终的build环境上面完成,拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程 |
3. Site生命周期
Maven Site 插件一般用来创建新的报告文档、部署站点等。
- pre-site:执行一些需要在生成站点文档之前完成的工作
- site:生成项目的站点文档
- post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
- site-deploy:将生成的站点文档部署到特定的服务器上
这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点。
三、配置文件
构建配置文件是一系列的配置项的值,可以用来设置或者覆盖 Maven 构建默认值。使用构建配置文件,可以为不同的环境,比如说生产环境(Producation)和开发(Development)环境,定制构建方式。
配置文件在 pom.xml 文件中使用 activeProfiles 或者 profiles 元素指定,并且可以通过各种方式触发。配置文件在构建时修改 POM,并且用来给参数设定不同的目标环境(比如说,开发(Development)、测试(Testing)和生产环境(Producation)中数据库服务器的地址)。
构建配置文件大体上有三种类型:
类型 | 在哪定义 |
---|---|
项目级(Per Project) | 定义在项目的POM文件pom.xml中 |
用户级 (Per User) | 定义在Maven的设置xml文件中 (%USER_HOME%/.m2/settings.xml) |
全局(Global) | 定义在 Maven 全局的设置 xml 文件中 (%M2_HOME%/conf/settings.xml) |
POM配置
在项目的根目录下面有个pom.xml的文件,该文件是用来配置Maven项目的,其中包括版本,生命周期,构建过程,依赖等的配置。POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
POM.xml 的根元素是 project,它有三个主要的子节点:groupId,artifactId,version。
节点 | 描述 |
---|---|
project | 工程的根标签。 |
groupId | 是项目组织中唯一的标识符,对应Java包结构,在idea中看到的是main目录里java的目录结构。一般分为多个段,这里我只说两段,第一段为域,第二段为公司名称。域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。 |
artifactId | 是项目的唯一的标识符,实际对应项目的名称(就是idea中工程的名字),就是项目根目录的名称。 |
version | 是该项目的版本信息。 |
四、仓库
在Maven中,仓库就是用来存放依赖文件的地方,是依赖管理的重要组成部分。仓库按照存放位置可以分为本地仓库,远程仓库以及中央仓库。
1. 本地仓库
本地仓库就是本地开发自己机器上的仓库。Maven 本地仓库是机器上的一个文件夹。它在第一次运行任何 maven 命令的时候创建。
Maven 本地仓库保存你的工程的所有依赖(library jar、plugin jar 等)。当你运行一次 Maven 构建,Maven 会自动下载所有依赖的 jar 文件到本地仓库中。它避免了每次构建时都引用存放在远程机器上的依赖文件。
Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。
2. 中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。
中央仓库的关键概念:
- 这个仓库由 Maven 社区管理。
- 不需要配置。
- 需要通过网络才能访问。
3. 远程仓库
有时候,我们可能没有网络或者网络由于条件约束,不允许在中央仓库下载依赖,那么组织可以自己定制一个远程仓库,让所有开发都从此仓库下载。我们定义好了远程仓库,然后修改POM文件即可。
网友评论