类似于 PHP 中的 Composer,NodeJS 中的 npm,Java 用 Maven 来管理依赖关系。
实际上,Maven 负责管理 Java 项目开发过程中的几乎所有的东西:
版本控制:Maven 有自己的版本定义和规则
依赖管理:Maven 的基础功能
构建:支持多种应用程序类型,提前定义了对应的构建规则和工具集
输出管理:项目构建的产物可以用 Maven 管理,可以加到指定的用户库中
文档:通过 site 命令发布各种文档信息,包括构建过程的输出报告,javadoc 文档等
项目关系:微服务模式下,一个项目通常由几个模块组成,用 Maven 可以完美应对
Maven 生命周期
POM 项目对象模型
pom.xml 元素
每个 Maven 项目的根目录下都有一个 pom.xml 文件,包含各种配置信息。Maven 用这个文件来构建项目。其中的可配置项有:
project dependencies
plugins
goals
build profiles
project version
developers
mailing list
其中,工程组(groupId)、名称(artifactId)和版本(version)属性是工程的唯一标识。
根项目配置示例:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.kikakika.myproject-group
myproject
pom
1.0-SNAPSHOT
myproject_common
myproject_base
子模块的配置:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
myproject
com.kikakika.myproject-group
1.0-SNAPSHOT
4.0.0
myproject_common
继承关系
每个项目根目录下的 pom.xml 文件可以被子项目或子模块的所继承,从而实现尽可能少的配置。
Maven 的构建生命周期
使用 Maven 构建项目时,可以指定多个基本的阶段,每个阶段中可以使用 pre 和 post 在特定阶段之前或之后执行目标:
资源拷贝-》编译-》单元测试-》打包创建 JAR 包或 WAR 包-》集成测试-》安装部署到本地或远程仓库
Maven 构建工程时,每个阶段都有以下三个标准的生命周期:
clean:清理之前的构建信息
default(or build):构建项目
site:创建新的报告文档、部署站点
Maven 仓库
通过 Maven 获取依赖时的顺序关系:
现在本地仓库查找依赖,如果依赖存在则停止查找
如果本地仓库不存在指定的依赖,则去官方提供的中央仓库查找,如果找到了则停止,如果没找到且没有配置远程仓库,则报错停止,否则去远程仓库查找
如果在远程仓库找到依赖,则停止,否则报错