Maven 是 Java 项目构建和依赖管理的得力助手。这里为你总结了一些常用指令,希望能帮你提升开发效率。
下面这个表格汇总了 Maven 最核心和常用的一些命令:
命令 | 主要功能 | 典型使用场景 |
---|---|---|
mvn clean | 清理项目,删除 target 目录及其所有编译输出文件。 | 确保全新的构建环境,避免旧文件干扰。 |
mvn compile | 编译项目的源代码(src/main/java 下的 .java 文件)。 | 快速检查源代码是否存在编译错误。 |
mvn test | 编译测试代码和源代码,并运行所有单元测试(使用 JUnit 或 TestNG)。 | 验证代码功能是否正确,是保证质量的重要环节。 |
mvn package | 将编译后的代码打包为可分发的格式(如 JAR、WAR)。 | 生成可用于部署或发布的构件。 |
mvn install | 将打包好的构件安装到本地 Maven 仓库(默认在 ~/.m2/repository )。 | 供本地其他项目引用,多模块项目开发时非常常用。 |
mvn deploy | 将构件部署到远程 Maven 仓库(需要配置)。 | 发布构件,以便团队其他成员或整个公司可以使用。 |
mvn dependency:tree | 显示项目的依赖树,展示所有直接依赖和传递依赖。 | 分析依赖关系,排查依赖冲突的利器。 |
mvn archetype:generate | 根据原型(模板)创建新项目。 | 快速搭建项目骨架。 |
mvn help:effective-settings # 查看生效的 settings 配置
mvn help:effective-pom # 查看生效的 POM 配置(合并了所有父POM)
mvn dependency:resolve # 解析并显示依赖的实际获取位置
🧩 理解 Maven 生命周期
Maven 命令与生命周期的概念紧密相关。Maven 有三套相互独立的生命周期:clean
(清理)、default
(默认,又称构建生命周期)、site
(站点文档)
。每个生命周期包含多个阶段。
当你执行某个生命周期阶段时,Maven 会自动执行该生命周期中所有之前的阶段。例如:
- •执行
mvn package
(default
生命周期的一个阶段)时,Maven 会先执行compile
,test
等所有位于package
之前的阶段。 - •执行
mvn install
会自动触发clean
之前的生命周期阶段(如compile
,test
,package
)。
🔧 常用参数与技巧
- •跳过测试:
- •
-DskipTests
: 跳过测试的运行,但会编译测试代码。 - •
-Dmaven.test.skip=true
: 同时跳过测试代码的编译和运行。效率更高,但完全不处理测试。
- •
- •强制更新快照依赖 (
-U
):强制检查并更新远程仓库中的快照(SNAPSHOT)版本依赖(默认每天只更新一次)。常用于确保使用依赖的最新快照。 - •指定配置文件 (
-P
): 激活在pom.xml
或settings.xml
中定义的特定 profile(配置剖面),常用于区分不同环境(如开发、测试、生产)。例如:mvn clean install -Pprod
。 - •离线模式 (
-o
):在离线模式下运行 Maven,仅使用本地仓库中已有的依赖,不联网检查更新。 - •显示调试信息 (
-X
): 输出 Maven 运行的详细调试信息,用于排查问题。
💡 高效命令组合
- •
mvn clean install
: 最常用的组合之一。先清理旧构建,再执行完整编译、测试、打包并安装到本地仓库。 - •
mvn clean package
: 清理后打包,常用于生成最终部署包。 - •
mvn clean install -DskipTests
: 快速安装,跳过测试以节省时间(请确保代码质量)。 - •
mvn clean install -U
: 清理安装并强制更新快照依赖。
📖 了解更多
- •想深入了解 Maven 的依赖管理(如排除依赖、解决冲突),可以多研究
pom.xml
中的<dependencies>
和<dependencyManagement>
配置。 - •探索各种 Maven 插件(如 Spring Boot、Docker 等相关的插件)可以让你更强大地自定义构建过程。
希望这份总结能帮助你更高效地使用 Maven。多练习,这些命令就会变得得心应手。
mvn -X dependency:resolve
mvn -e -X clean package
mvn -X dependency:resolve | grep -i "spring-core"
mvn -X dependency:resolve| Select-String "spring-core"
检查是否有其他依赖引入旧版本
mvn dependency:tree -Dincludes=*jsqlparser*
1. 首先修复父 POM 中的重复模块定义2. 然后在项目根目录执行:mvn clean install -DskipTests
3. 最后在子模块目录执行:mvn clean compile
# 清理本地缓存
mvn clean install -U# 或者强制更新所有依赖
mvn clean compile -U -Dmaven.main.skip=truemvn dependency:tree | grep jsqlparser
# 快速构建(跳过测试和代码检查)
mvn clean install -DskipTests -Dcheckstyle.skip=true -Dspotbugs.skip=true# 仅清理和编译
mvn clean compile# 构建并运行测试(不打包)
mvn clean test# 重新下载所有依赖
mvn clean compile -U# 查看项目信息
mvn help:effective-pom# 查看项目描述
mvn help:describe# 查看插件信息
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin# 生成项目站点
mvn site
# 查看依赖树
mvn dependency:tree# 分析依赖冲突
mvn dependency:analyze# 下载所有依赖源码
mvn dependency:sources# 下载依赖的javadoc
mvn dependency:resolve -Dclassifier=javadoc# 复制依赖到指定目录
mvn dependency:copy-dependencies
# 清理并重新构建项目
mvn clean install# 跳过测试构建
mvn clean install -DskipTests# 仅编译项目
mvn compile# 运行测试
mvn test# 打包项目
mvn package# 安装到本地仓库
mvn install# 部署到远程仓库
mvn deployE:\仿真\osp-cloud-java-1.2.0-xn-release\xn-modules\xn-system>mvn dependency:tree -Dincludes=*jsqlparser*
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.cnpc.xn:xn-system >------------------------
[INFO] Building xn-system 1.2.100-xn-release
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ xn-system ---
[INFO] com.cnpc.xn:xn-system:jar:1.2.100-xn-release
[INFO] \- cnpc.udp.dfw:udp-mybatis-plus-starter:jar:1.3.1:compile
[INFO] \- com.baomidou:mybatis-plus-jsqlparser:jar:3.5.10.1:compile
[INFO] \- com.github.jsqlparser:jsqlparser:jar:5.1:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.803 s
[INFO] Finished at: 2025-09-03T09:26:30+08:00
[INFO] ------------------------------------------------------------------------