1. Maven是什么
Maven是一款自动化构建工具,基于项目对象模型(POM),专注于JAVA平台的项目构建和依赖管理。
项目对象模型(Project Object Model, POM):将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。Maven 工程的核心配置。
2. Maven功能
Maven可以帮助开发者完成项目构建、文档生成、报告、依赖管理等工作。
3. 项目构建的主要环节
- 清理(clean):删除旧的编译文件。
- 编译(compile):将Java源文件编译为字节码文件。
- 测试(test):针对项目中的关键点进行测试。
- 报告:在每次测试后以标准的格式记录和展示测试结果。
- 打包(package):将当前工程打成一个Jar或者War包。Java工程打为Jar包,Web工程打为War包。
- 安装(install):将打好的Jar或者War包安装到本地仓库中。
- 部署(deploy):将打好的包部署到远程仓库或者将war包部署到服务器上。
4. Maven命令
mvn -v
:查看Maven的版本mvn clean
:删除旧的编译文件mvn compile
:编译,生成字节码文件mvn test
:编译并且测试mvn package
:生成target目录,编译、测试、生成测试报告、打为jar/war包mvn clean compile
:先删除旧的编译文件,之后重新编译mvn clean package
:先删除旧的编译文件,然后重新编译、测试、生成测试报告、打为jar/war包。mvn clean install
: 先删除旧的编译文件,然后重新编译、测试、生成测试报告、打为jar/war包、将打好的包安装到本地仓库中。mvn clean deploy
: 先删除旧的编译文件,然后重新编译、测试、生成测试报告、打为jar/war包、将打好的包安装到本地仓库中、将打好的包部署到远程仓库或者将war包部署到服务器上。
5. Maven坐标
Maven使用以下三个标签来唯一的确定一个Maven工程
groupid
:公司或组织的域名倒序+当前项目名称artifactId
:当前项目的模块名称version
:当前模块的版本
1 | <dependency> |
6. 依赖管理
6.1 引入依赖
当A.jar
使用到了B.jar
中的类时,A就依赖了B。在maven项目中引入该项目需要依赖的jar包时,直接在pom.xml
文件中引入依赖就可以了。
1 | <dependencies> |
6.2 依赖的范围
依赖信息中除了目标 jar 包的坐标还有一个 scope 设置,这就是依赖的范围。依赖的范围有几个可选值,常用的有:compile、test、provided 三个,当然还有不常用的 runtime、system.
- compile:默认范围,编译、测试、运行都有效
- provided:在编译和测试时有效
- test:只在测试时有效
- runtime:在测试和运行时有效
- system:在编译和测试时有效,与本机系统关联,可移植性差
1 | <dependency> |
6.3 传递依赖
A 依赖 B,B 依赖 C,如果 B 依赖 C 的范围是 compile,那么A可以使用C,否则A不可使用C。
6.4 排除依赖
使用
1 | <dependency> |
6.5 依赖原则
作用:解决jar包冲突
路径最短者优先
路径相同时先声明者优先(先声明是指dependency标签的声明顺序)
IDEA插件Maven Helper可以帮助分析依赖
7. 生命周期
Maven 生命周期定义了各个构建环节的执行顺序。有了执行顺序的定义,就可以自动执行构建命令了。
Maven 有三套相互独立的生命周期,分别是:
Clean Lifecycle
: 在进行真正的构建之前进行一些清理工作Default Lifecycle
: 构建的核心部分,编译,测试,打包,安装,部署等等Site Lifecycle
:生成项目报告,站点,发布站点
运行任何一个阶段的时候,它前面的所有阶段都会被运行
7.1 Clean Lifecycle
分为3个阶段
pre-clean
执行一些需要在 clean 之前完成的工作clean
移除所有上一次构建生成的文件post-clean
执行一些需要在 clean 之后立刻完成的工作
7.2 Default Lifecycle
是Maven中最重要的生命周期
validate
:验证工程是否正确,所有需要的资源是否可用compile
:编译test
:测试已编译的源代码。这些测试不需要已打包和布署package
:打包成可发布的格式,比如 jar、war 等integration-test
:如有需要,将包处理和发布到一个能够进行集成测试的环境verify
:运行所有检查,验证包是否有效且达到质量标准install
:把打好的包安装到本地仓库deploy
:将打好的包部署到远程仓库或者将war包部署到服务器上
7.3 Site Lifecycle
pre-site
:执行一些需要在生成站点文档之前完成的工作site
:生成项目的站点文档post-site
:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备site-deploy
:将生成的站点文档部署到特定的服务器上这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这是 Maven 相当强大的功能。
8. Maven插件
- Maven 的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的
- 每个插件都能实现多个功能,每个功能就是一个插件
- Maven 的生命周期与插件相互绑定,以完成某个具体的构建任务.例如:compile 就是插件 maven-compiler-plugin 的一个目标;pre-clean 是插件 maven-clean-plugin 的一个目标
1 | <plugins> |