源本科技 | 码上会

Maven 常用命令

2026/03/17
22
0

在哪里运行命令

Maven 命令可以在任何包含 pom.xml 文件的项目根目录下执行。主要有以下两种常见方式:

1. 系统终端

这是最通用的方式,适用于所有操作系统。

  • 操作步骤

    1. 打开命令行工具(Windows 的 CMD/PowerShell,Mac/Linux 的 Terminal)。

    2. 使用 cd 命令切换到项目根目录(即 pom.xml 所在的目录)。

      cd D:\Workspaces\Study\demo
    3. 直接输入 Maven 命令,如 mvn clean package

2. IDE 内置终端

现代 IDE 通常集成了 Maven 支持,提供了更便捷的操作界面。

  • IDEA 内置终端

    • 点击 IDEA 底部的 Terminal 标签,它会自动定位到当前项目根目录。

    • 直接输入 mvn 命令即可执行,享受 IDE 提供的路径自动补全和环境变量继承功能。

  • IDEA Maven 侧边栏

    • 除了命令行,IDEA 右侧的 Maven 面板以图形化方式展示了生命周期和插件任务。

    • 双击对应的阶段(如 package)即可执行,效果等同于命令行输入 mvn package

    • 优势:图形化展示依赖树、快速查看执行历史、方便调试特定目标。

最佳实践:虽然图形界面方便,但建议开发者熟练掌握命令行操作。因为在 CI/CD(持续集成 / 持续部署)服务器(如 Jenkins, GitLab CI)上,通常只能通过命令行脚本进行构建。


核心命令

Maven 的命令通常对应生命周期中的某个阶段。执行某个阶段时,Maven 会自动按顺序执行该阶段之前的所有阶段。

1. 清理命令

mvn clean

  • 作用:清理上一次构建生成的所有文件,确保下一次构建是在一个干净的环境中进行的。

  • 执行行为

    • 删除项目根目录下的 target 文件夹及其所有内容(包括编译后的 .class 文件、打包好的 JAR/WAR 包、测试报告等)。

  • 使用场景

    • 当构建出现奇怪错误(如类找不到、旧代码残留)时。

    • 在发布正式版本前,确保不包含任何临时文件。

  • 示例

    mvn clean

2. 编译命令

mvn compile

  • 作用:将项目的源代码编译成字节码文件。

  • 执行行为

    • 读取 src/main/java 目录下的 .java 文件。

    • 调用 JDK 编译器 (javac) 进行编译。

    • 将生成的 .class 文件输出到 target/classes 目录。

    • 注意:此阶段不会处理资源文件(src/main/resources 中的文件通常在 process-resources 阶段处理,但在执行 compile 时通常也会顺带完成前置步骤),也不会运行测试。

  • 使用场景

    • 仅想检查代码是否有语法错误,而不想运行耗时的测试用例时。

  • 示例

    mvn compile

3. 测试命令

mvn 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 test

4. 打包命令

mvn package

  • 作用:将编译后的代码和资源文件打包成可分发的归档文件。

  • 执行行为

    • 执行完整的构建流程直到 package 阶段(包含编译、测试)。

    • 根据 pom.xml<packaging> 标签的定义(默认为 jar),生成相应的文件。

      • jar:生成 Java 库文件。

      • war:生成 Web 应用包。

      • pom:仅生成 POM 文件(用于聚合项目)。

    • 生成的文件位于 target 目录下(如 target/demo-1.0-SNAPSHOT.jar)。

  • 使用场景

    • 本地开发完成,需要生成可执行文件或部署包时。

  • 示例

    mvn package

5. 安装命令

mvn install

  • 作用:将构建产物安装到本地 Maven 仓库,供其他本地项目引用。

  • 执行行为

    • 执行完整的构建流程直到 install 阶段(包含 package)。

    • 将生成的 JAR/WAR 包以及 pom.xml 复制到本地仓库目录(默认为 ~/.m2/repository 或配置的自定义路径)。

    • 目录结构将按照 groupId/artifactId/version 的规则排列。

  • 使用场景

    • 开发了多个模块(Module A 依赖 Module B),在本地调试时,需要先 install Module B,这样 Module A 才能找到最新版本的依赖。

    • 开发通用的工具库,希望在本机其他项目中使用时。

  • 示例

    mvn install

命令组合

在实际开发中,我们很少单独执行某个命令,通常是组合使用。

1. 黄金组合

clean package

这是最常用的命令组合。先清理旧的构建产物,再重新编译、测试并打包。

mvn clean package

执行流程clean (删除 target) -> validate -> compile -> test -> package
适用场景:每次提交代码前,或需要获取最新构建包时。

2. 跳过测试加速构建

在开发过程中,如果确信代码无误,或者测试用例耗时过长,可以暂时跳过测试以加快构建速度。

# 编译测试代码,但不执行测试
mvn clean package -DskipTests

# 连测试代码都不编译,直接打包(速度最快,但风险较高)
mvn clean package -Dmaven.test.skip=true

3. 指定构建目标

除了生命周期阶段(Phase),Maven 还支持直接运行插件的具体目标(Goal)。

  • 查看依赖树:分析项目依赖关系,解决冲突。

    mvn dependency:tree
  • 生成源码包:同时打包源码,方便他人查阅。

    mvn source:jar
  • 格式化代码:使用插件自动格式化代码(需配置插件)。

    mvn fmt:format

4. 离线模式

如果在没有网络的环境下(如内网服务器),可以使用离线模式,强制 Maven 仅使用本地仓库的依赖。

mvn clean package -o
# 或
mvn clean package --offline

注意:如果本地仓库缺少必要的依赖,构建会直接失败。