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

说明:

  1. 表格中仅列出各生命周期的核心阶段,实际每个生命周期包含更多细分阶段(如defaultinitializeprocess-resources等),但日常使用中核心阶段已能满足大部分需求。
  2. 执行任何阶段时,Maven 会自动按顺序执行该生命周期中所有在它之前的阶段 (例如执行mvn install会触发validatecompiletest→...→install的完整流程)。
  3. 三大生命周期相互独立,例如执行mvn clean package会先执行clean生命周期的pre-cleanclean,再执行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文件中

java 复制代码
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文件动态填充

java 复制代码
spring:
  profiles:
    active: '@profileActive@'

也可以在这里配置

跳过测试

私服

私服仓库分类

资源上传和下载

在setting.xml中配置上传的权限和路径

临时版本:对应依赖的版本后缀为SNAPSHOT(快照版本)

发布版本:对应依赖的版本后缀为RELEASE(发布版本)

在工程里面配置上传下载的路径

私服中配置连接中央仓库的镜像

在名为maven-central仓库中配置

步骤总结

常用的maven命令

相关推荐
小白(猿)员2 分钟前
JVM、JDK、JRE的区别
java·开发语言·jvm
axban17 分钟前
QT中删除控件的注意事项、deleteLater和delete的区别
java·数据库·qt
MicoZone26 分钟前
JDK源码
java
Resean02231 小时前
SpringMVC 6+源码分析(二)DispatcherServlet实例化流程 1
java·spring boot·spring·servlet·springmvc
泉城老铁2 小时前
Spring Boot 对接阿里云 OSS 的详细步骤和流程
java·后端·程序员
-$_$-2 小时前
【笔试真题】2024秋招京东后端开发岗位-第一批笔试
java·开发语言
R cddddd2 小时前
Spring Boot Admin 监控模块笔记-实现全链路追踪
java·笔记·spring cloud
唐叔在学习3 小时前
Maven - 并行安全无重复打包构建原理揭秘
java·maven·maven并行构建·maven反应堆原理
山间小僧3 小时前
「查漏补缺」ZGC相关内容整理
java·jvm·后端