Maven 命令可以在任何包含 pom.xml 文件的项目根目录下执行。主要有以下两种常见方式:
这是最通用的方式,适用于所有操作系统。
操作步骤:
打开命令行工具(Windows 的 CMD/PowerShell,Mac/Linux 的 Terminal)。
使用 cd 命令切换到项目根目录(即 pom.xml 所在的目录)。
cd D:\Workspaces\Study\demo直接输入 Maven 命令,如 mvn clean package。
现代 IDE 通常集成了 Maven 支持,提供了更便捷的操作界面。
IDEA 内置终端:
点击 IDEA 底部的 Terminal 标签,它会自动定位到当前项目根目录。
直接输入 mvn 命令即可执行,享受 IDE 提供的路径自动补全和环境变量继承功能。
IDEA Maven 侧边栏:
除了命令行,IDEA 右侧的 Maven 面板以图形化方式展示了生命周期和插件任务。
双击对应的阶段(如 package)即可执行,效果等同于命令行输入 mvn package。
优势:图形化展示依赖树、快速查看执行历史、方便调试特定目标。
最佳实践:虽然图形界面方便,但建议开发者熟练掌握命令行操作。因为在 CI/CD(持续集成 / 持续部署)服务器(如 Jenkins, GitLab CI)上,通常只能通过命令行脚本进行构建。
Maven 的命令通常对应生命周期中的某个阶段。执行某个阶段时,Maven 会自动按顺序执行该阶段之前的所有阶段。
mvn clean
作用:清理上一次构建生成的所有文件,确保下一次构建是在一个干净的环境中进行的。
执行行为:
删除项目根目录下的 target 文件夹及其所有内容(包括编译后的 .class 文件、打包好的 JAR/WAR 包、测试报告等)。
使用场景:
当构建出现奇怪错误(如类找不到、旧代码残留)时。
在发布正式版本前,确保不包含任何临时文件。
示例:
mvn cleanmvn compile
作用:将项目的源代码编译成字节码文件。
执行行为:
读取 src/main/java 目录下的 .java 文件。
调用 JDK 编译器 (javac) 进行编译。
将生成的 .class 文件输出到 target/classes 目录。
注意:此阶段不会处理资源文件(src/main/resources 中的文件通常在 process-resources 阶段处理,但在执行 compile 时通常也会顺带完成前置步骤),也不会运行测试。
使用场景:
仅想检查代码是否有语法错误,而不想运行耗时的测试用例时。
示例:
mvn compilemvn test
作用:编译代码并运行单元测试。
执行行为:
自动执行 validate -> compile -> process-resources -> test-compile 等前置阶段。
编译 src/test/java 下的测试代码。
调用测试框架(默认是 JUnit,也支持 TestNG)运行所有符合命名规范的测试类(如 *Test.java, *TestCase.java)。
在控制台输出测试结果(成功、失败、跳过数量),并生成测试报告(位于 target/surefire-reports)。
关键点:
如果有任何一个测试用例失败,构建过程会立即终止,后续的打包阶段不会执行。
若要跳过测试,可添加参数:mvn package -DskipTests (编译测试代码但不运行) 或 mvn package -Dmaven.test.skip=true (既不编译也不运行测试代码)。
示例:
mvn testmvn package
作用:将编译后的代码和资源文件打包成可分发的归档文件。
执行行为:
执行完整的构建流程直到 package 阶段(包含编译、测试)。
根据 pom.xml 中 <packaging> 标签的定义(默认为 jar),生成相应的文件。
jar:生成 Java 库文件。
war:生成 Web 应用包。
pom:仅生成 POM 文件(用于聚合项目)。
生成的文件位于 target 目录下(如 target/demo-1.0-SNAPSHOT.jar)。
使用场景:
本地开发完成,需要生成可执行文件或部署包时。
示例:
mvn packagemvn install
作用:将构建产物安装到本地 Maven 仓库,供其他本地项目引用。
执行行为:
执行完整的构建流程直到 install 阶段(包含 package)。
将生成的 JAR/WAR 包以及 pom.xml 复制到本地仓库目录(默认为 ~/.m2/repository 或配置的自定义路径)。
目录结构将按照 groupId/artifactId/version 的规则排列。
使用场景:
开发了多个模块(Module A 依赖 Module B),在本地调试时,需要先 install Module B,这样 Module A 才能找到最新版本的依赖。
开发通用的工具库,希望在本机其他项目中使用时。
示例:
mvn install在实际开发中,我们很少单独执行某个命令,通常是组合使用。
clean package
这是最常用的命令组合。先清理旧的构建产物,再重新编译、测试并打包。
mvn clean package执行流程:clean (删除 target) -> validate -> compile -> test -> package。
适用场景:每次提交代码前,或需要获取最新构建包时。
在开发过程中,如果确信代码无误,或者测试用例耗时过长,可以暂时跳过测试以加快构建速度。
# 编译测试代码,但不执行测试
mvn clean package -DskipTests
# 连测试代码都不编译,直接打包(速度最快,但风险较高)
mvn clean package -Dmaven.test.skip=true除了生命周期阶段(Phase),Maven 还支持直接运行插件的具体目标(Goal)。
查看依赖树:分析项目依赖关系,解决冲突。
mvn dependency:tree生成源码包:同时打包源码,方便他人查阅。
mvn source:jar格式化代码:使用插件自动格式化代码(需配置插件)。
mvn fmt:format如果在没有网络的环境下(如内网服务器),可以使用离线模式,强制 Maven 仅使用本地仓库的依赖。
mvn clean package -o
# 或
mvn clean package --offline注意:如果本地仓库缺少必要的依赖,构建会直接失败。