Maven是一个基于项目对象模型(POM)的概念的纯java开发的开源的项目管理工具。主要用来管理java项目,进行依赖管理(jar包依赖管理)和项目构建(项目编译、打包、测试、部署)。
此外还可以分模块开发(聚合项目,父项目里有许多子项目),提高开发效率。
一、maven生命周期
maven中pom.xml会引入这样的一个标签:<plugin><plugin>插件标签
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
不同的插件结合起来,就可以完成整个项目的构建 ,其中项目的构建环节就对应lifecycle生命周期。 lifecycle:
clean | 项目编译后,可以通过clean清楚target包 |
validate | 验证项目是否正确,所需要的信息是否完整 |
compile | 编译后,会产生一个target包,其中有一个class文件 |
test | 做单元测试 |
package | 将项目打包,保存在target下 |
verify | 集成测试,检查package是否有效,符合标准 |
install | 将项目打包,保存在target下,还会保存在本地仓库 |
deploy | 将项目打包,保存在target下,保存在本地仓库,还会保存到私服 |
site | 生成项目的站点文档 |
二、maven仓库
maven仓库时存储依赖的地方,体现形式是本地的一个目录。
仓库中不仅存放着依赖,而且管理着每个依赖的唯一坐标GAV,Java项目可以凭坐标获取依赖。
GroupId | 通常写com.XXX |
ArtifactId | 项目名 |
Version | 版本 |
仓库分类:分为本地仓库和远程仓库:
本地仓库即在本地磁盘中的maven仓库;
远程仓库:1.中央仓库:maven社区提供的仓库
2.公共仓库:国内的公共仓库(镜像)
3.私服:公司范围内共享的仓库
三、依赖生命周期
compile | 缺省值(默认值)适用于测试、编译、运行、打包阶段 |
provided | 与compile有些类似,期望JDK、容器或使用者会提供这个依赖。如servlet-api.jar;适用于测试,编译阶段 |
runtime | 只在运行时使用,适用于运行,测试阶段,如 mysql的驱动jar |
test | 只在测试时使用,适用于编译,测试阶段,如 junit.jar |
system | Maven不会在仓库中查找对应的依赖,会在本地磁盘目录中查找;适用于编译,测试,运行阶段 |
<scope>compile</scope>
<scope>provided</scope>
<scope>runtime</scope>
<scope>test</scope>
<scope>system</scope>