1 前言
Maven是一个项目管理工具,可对Java项目进行构建、依赖管理。
2 Maven提倡的标准目录及目的
目录 | 目的 |
---|---|
${basedir} | 存放pom.xml和所有的子目录 |
${basedir}/src/main/java | 项目的java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说property文件,springmvc.xml |
${basedir}/src/test/java | 项目的测试类,比如说Junit代码 |
${basedir}/src/test/resources | 测试用的资源 |
${basedir}/src/main/webapp/WEB-INF | web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面 |
${basedir}/target | 打包输出目录 |
${basedir}/target/classes | 编译输出目录 |
${basedir}/target/test-classes | 测试编译输出目录 |
Test.java | Maven只会自动运行符合该命名规则的测试类 |
~/.m2/repository | Maven默认的本地仓库目录位置 |
3 Maven环境配置
https://www.runoob.com/maven/maven-setup.html
4 Maven POM
POM(Project Object Model,项目对象模型),包含了项目的基本信息,用于描述项目如何构建,声明项目依赖等。
执行目标时,Maven会先在当前目录查找POM并获取配置信息,然后再执行目标。
4.1 元素和字段的含义
节点 | 含义 |
---|---|
project | 工程的根标签 |
modelVersion | 模型版本 |
groupId | 公司或者组织的唯一标志 |
artifactId | 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 |
version | 工程的版本号 |
4.2 Super POM
父POM是Maven默认的POM,所有POM都继承自一个父POM,可以让开发者在pom.xml中做尽可能少的配置,当然配置可以被重写。
以下指令可查看Super POM:
1 | mvn help:effective-pom |
4.3 POM标签大全
pom模板样例
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
5 Maven构建生命周期
验证validate
编译compile
测试Test
打包package
检查verify
安装install
部署deploy
5.1 三个标准声明周期
(1)clean:项目清理的处理
(2)default:项目部署的处理
(3)site:项目站点文档创建的处理
5.1.1 clean的生命周期
clean生命周期包括以下三个阶段:
阶段 | 工作 |
---|---|
pre-clean | 执行需要在clean前完成的工作 |
clean | 移除所有上次构建生成的文件 |
post-clean | 执行需要在clean完成后立即完成的工作 |
指令示例
(1) 执行pre-clean和clean两个阶段
1 | mvn clean |
(2) 执行所有(三个)阶段
1 | mvn post-clean |
5.1.2 default生命周期
这是Maven的主要生命周期,用于构建应用,包括23个阶段。
生命周期阶段 | 描述 |
---|---|
validate(校验) | 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。 |
initialize(初始化) | 初始化构建状态,比如设置属性值。 |
generate-sources(生成源代码) | 生成包含在编译阶段中的任何源代码。 |
process-sources(处理源代码) | 处理源代码,比如说,过滤任意值。 |
generate-resources(生成资源文件) | 生成将会包含在项目包中的资源文件。 |
process-resources (处理资源文件) | 复制和处理资源到目标目录,为打包阶段最好准备。 |
compile(编译) | 编译项目的源代码。 |
process-classes(处理类文件) | 处理编译生成的文件,比如说对Java class文件做字节码改善优化。 |
generate-test-sources(生成测试源代码) | 生成包含在编译阶段中的任何测试源代码。 |
process-test-sources(处理测试源代码) | 处理测试源代码,比如说,过滤任意值。 |
generate-test-resources(生成测试资源文件) | 为测试创建资源文件。 |
process-test-resources(处理测试资源文件) | 复制和处理测试资源到目标目录。 |
test-compile(编译测试源码) | 编译测试源代码到测试目标目录. |
process-test-classes(处理测试类文件) | 处理测试源码编译生成的文件。 |
test(测试) | 使用合适的单元测试框架运行测试(Juint是其中之一)。 |
prepare-package(准备打包) | 在实际打包之前,执行任何的必要的操作为打包做准备。 |
package(打包) | 将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。 |
pre-integration-test(集成测试前) | 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。 |
integration-test(集成测试) | 处理和部署项目到可以运行集成测试环境中。 |
post-integration-test(集成测试后) | 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。 |
verify (验证) | 运行任意的检查来验证项目包有效且达到质量标准。 |
install(安装) | 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。 |
deploy(部署) | 将最终的项目包复制到远程仓库中与其他开发者和项目共享。 |
注意:执行某阶段的调用,比如mvn compile
时,只有当前阶段及前面的阶段被执行。
指令示例
(1)使用以下命令构建、安装工程到本地仓库:
1 | mvn install |
(2)使用下面的调用来纯净地构建和部署项目到共享仓库中
1 | mvn clean deploy |
5.1.3 site生命周期
一般用于创建新的报告文档、部署站点等。包括以下阶段
阶段 | 描述 |
---|---|
pre-site | 执行需要在生成站点前需要完成的工作 |
site | 生成项目的站点文档 |
post-site | 执行需要在站点文档生成后要完成的工作,并为部署做准备 |
site-deploy | 将生成的站点文档部署到特定服务器上 |
6 构建配置文件
6.1 配置文件类型
类型 | 位置 |
---|---|
项目级 | 定义在项目的POM文件pom.xml中 |
用户级 | 定义在Maven的设置xml文件中 (%USER_HOME%/.m2/settings.xml) |
全局 | 定义在 Maven 全局的设置 xml 文件中 (%M2_HOME%/conf/settings.xml) |
6.2 通过Maven设置激活配置文件
(1)在setting.xml文件中增加<activeProfiles>
属性
1 | <settings xmlns="http://maven.apache.org/POM/4.0.0" |
(2)然后执行命令(需要有符合命名规则的测试类才能正常执行)
1 | mvn test |
注意:这里setting.xml可以是用户目录下的setting也可是全局的,对应查看上文提到的位置即可找到文件。
7 Maven仓库
Maven仓库就是存放jar,war,zip,pom等文件的地方。
(1)本地local
(2)中央central
(3)远程remote
7.1 本地仓库
在第一次执行Maven命令后自动创建。一般来说默认位置是%USER_HOME%\.m2\repository
。当然也可以通过全局配置文件%M2_HOME%/conf/settings.xml
修改本地仓库位置,比如
1 | <localRepository>D://apache-maven-3.8.4-bin//LocalWarehouse</localRepository> |
运行Maven时,所需的构建会从本地仓库获取,没有的话就尝试从远程仓库下载到本地,然后再从本地使用。
7.2 中央仓库
由Maven社区提供,不需要配置,通过网络访问。https://search.maven.org/#browse
7.3 远程仓库
为避免在Maven中央仓库找不到依赖而停止构建的情况,而提出的概念。在pom.xml中dependency标签可以指定从远程仓库下载何种依赖。
7.4 依赖的搜索顺序
- 本地仓库
- 中央仓库
- 远程仓库
7.5 阿里云仓库
配置参考https://developer.aliyun.com/mvn/guide
1 | <mirror> |
8 Maven插件
在pom.xml中配置
8.1 插件类型
类型 | 描述 |
---|---|
Build plugins | 构建时执行 |
Reporting plugins | 网站生成过程中执行 |
8.2 插件列表
插件 | 描述 |
---|---|
clean | 构建之后清理目标文件。删除目标目录。 |
compiler | 编译 Java 源文件。 |
surefile | 运行 JUnit 单元测试。创建测试报告。 |
jar | 从当前工程中构建 JAR 文件。 |
war | 从当前工程中构建 WAR 文件。 |
javadoc | 为工程生成 Javadoc。 |
antrun | 从构建过程的任意一个阶段中运行一个 ant 任务的集合。 |
9 Maven构建Java项目
命令行的方式创建一个,组织名为com.companyname.bank,项目名为consumerBanking,原型ArchetypeId为maven-archetype-quickstart,不适用交互模式的简单Java应用项目。
1 | mvn archetype:generate "-DgroupId=com.companyname.bank" "-DartifactId=consumerBanking" "-DarchetypeArtifactId=maven-archetype-quickstart" "-DinteractiveMode=false" |