Maven学习
Maven的生命周期
生命周期类型 | 阶段名称 | 阶段描述 | 执行示例(触发该阶段及之前所有阶段) |
---|---|---|---|
clean | pre-clean | 执行清理前的准备工作(如备份文件) | mvn pre-clean |
clean | 删除上一次构建生成的文件(如 target 目录) | mvn clean | |
post-clean | 执行清理后的收尾工作(如删除备份) | mvn post-clean | |
default | validate | 验证项目配置是否正确,确保必要信息(如依赖、参数)完整有效 | mvn validate |
compile | 编译项目的主源代码(将.java 文件编译为.class 文件) | mvn compile | |
test | 使用单元测试框架(如 JUnit)执行编译后的测试代码,不依赖打包或部署 | mvn test | |
package | 将编译后的代码打包为可分发格式(如 JAR、WAR、EAR 等) | mvn package | |
verify | 检查集成测试结果,确保符合质量标准(如代码覆盖率、测试通过率) | mvn verify | |
install | 将打包后的文件安装到本地 Maven 仓库(默认路径:~/.m2/repository ),供本地其他项目依赖 | mvn install | |
deploy | 将最终包上传到远程 Maven 仓库,供团队其他开发者或项目共享 | mvn deploy | |
site | pre-site | 生成站点文档前的准备工作(如收集文档素材) | mvn pre-site |
site | 生成项目站点文档(如 API 文档、项目说明等) | mvn site | |
post-site | 生成站点后的收尾工作(如校验文档完整性) | mvn post-site | |
site-deploy | 将生成的站点文档部署到指定服务器(如 HTTP 服务器)供访问 | mvn site-deploy |
说明:
- 表格中仅列出各生命周期的核心阶段,实际每个生命周期包含更多细分阶段(如
default
的initialize
、process-resources
等),但日常使用中核心阶段已能满足大部分需求。 - 执行任何阶段时,Maven 会自动按顺序执行该生命周期中所有在它之前的阶段(例如执行
mvn install
会触发validate
→compile
→test
→...→install
的完整流程)。 - 三大生命周期相互独立,例如执行
mvn clean package
会先执行clean
生命周期的pre-clean
和clean
,再执行default
生命周期到package
的所有阶段。
Maven命令参数
参数说明表
参数 | 作用说明 |
---|---|
-DskipTests | 跳过测试执行 |
-Dmaven.test.skip=true | 跳过测试编译和执行 |
-P<profile> | 激活指定的 Profile |
-T <n> | 并行构建线程数(-T 4 或 -T 1C ) |
-pl <module> | 指定构建的模块 |
-am | 同时构建依赖模块 |
-o | 离线模式 |
-X | 开启 DEBUG 日志 |
-U | 强制更新 SNAPSHOT 依赖 |
-f <path> | 指定 POM 文件路径 |
-s <path> | 指定 settings.xml 路径 |
💡 提示:
参数顺序通常不影响执行(如
mvn -DskipTests clean install
有效)。使用
mvn help:effective-pom
可查看合并参数后的实际 POM 配置。
常见作用域(Scope)对比:
Scope | 生效阶段 | 是否打入构建产物 | 典型用例 |
---|---|---|---|
test | 仅测试阶段(编译/运行测试) | ❌ 否 | JUnit, Mockito |
compile | 编译、测试、运行(默认值) | ✅ 是 | Spring Core, Apache Commons |
provided | 编译和测试阶段 | ❌ 否 | Servlet API(由容器提供) |
runtime | 测试和运行阶段 | ✅ 是 | JDBC 驱动(如 MySQL Connector) |
system | 同 provided ,但需显式指定路径 | ❌ 否 | 本地特殊 JAR 文件 |
分模块开发和设计
1. 02工程需要使用domain包下的实体类但是没有
2.domain包在03工程中
3.只需要在02工程中的POM文件中引入03工程的依赖坐标(该坐标在03工程的POM文件下可以找到)
4.但是此时你maven编译02工程会报错(03工程的依赖找不到)(因为本地仓库没有03工程依赖)
5.对03工程进行install可以看到03工程的依赖可以安装到了本地仓库,此时可以运行02工程了
依赖管理
依赖具有传递性
依赖的冲突性
依赖因为有传递性,所以会导致依赖冲突的问题(依赖多个版本的依赖,不确定用哪个)
可选依赖
可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源将不具备依赖的传递性
排除依赖
排除依赖是隐藏当前资源对应的依赖关系
聚合
为什么需要聚合
例如:依赖关系如下
当pojo包改变时可能会不兼容其他引用他的工程这个这个时候需要加一个聚合工程(maven
的根目录)
步骤
继承
在子工程中配置继承的父工程,就可以获取父工程的依赖(简化配置)
步骤
聚合和继承的区别
属性
用于定义变量和统一管理依赖的版本
资源文件引用属性
其他属性
版本管理
多环境开发
实现这种效果
第一步
在聚合工程的POM文件中
profiles><profile><id>dev</id><properties><profileActive>dev</profileActive></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>prod</id><properties><profileActive>prod</profileActive></properties></profile><profile><id>qa</id><properties><profileActive>qa</profileActive></properties></profile></profiles>
第二步:我们有很多配置文件
默认是在application.yml生效
里面有标签为active指定激活那一份配置文件
由聚合工程的pom文件动态填充
spring:profiles:active: '@profileActive@'
也可以在这里配置
跳过测试
私服
私服仓库分类
资源上传和下载
在setting.xml中配置上传的权限和路径
临时版本:对应依赖的版本后缀为SNAPSHOT(快照版本)
发布版本:对应依赖的版本后缀为RELEASE(发布版本)
在工程里面配置上传下载的路径
私服中配置连接中央仓库的镜像
在名为maven-central仓库中配置