关于Maven构建命令使用详解

 更新时间:2025年02月28日 10:04:26   作者:drebander  
Maven构建命令详解:mvnclean、mvncompile、mvntest、mvnpackage、mvninstall、mvndeploy及其他常用命令,帮助开发者高效管理项目构建流程

1. Maven 构建命令概述

Maven 是 Java 生态中最流行的构建工具之一,它提供了一套标准化的构建命令,使得开发者可以轻松管理项目的编译、测试、打包、安装和部署等任务。

本篇文章将深入解析 Maven 中最常用的构建命令,包括:

  • mvn clean
  • mvn compile
  • mvn test
  • mvn package
  • mvn install
  • mvn deploy
  • 其他常见命令,如 mvn dependency:treemvn help:effective-pom 等。

2. Maven 构建命令详解

2.1 mvn clean

作用:清除 target/ 目录,删除之前构建的文件,确保下一次构建的干净环境。

mvn clean

执行过程

  • 删除 target/ 目录
  • 移除编译生成的 class 文件、打包的 JAR 文件等

适用场景

  • 在重新构建项目之前,避免旧的编译文件影响新版本。

示例

mvn clean package

效果

  • 先清理 target/ 目录,再进行打包。

2.2 mvn compile

作用:编译 src/main/java 目录下的源代码,并生成 .class 文件到 target/classes/ 目录。

mvn compile

执行过程

  • 解析 pom.xml
  • 下载项目依赖(如果依赖不存在)
  • 编译 src/main/java 目录下的 Java 源代码
  • 生成 .class 文件到 target/classes/

适用场景

  • 当需要仅编译代码而不执行测试时。

示例

mvn clean compile

效果

  • 先清理 target/ 目录,然后编译代码。

2.3 mvn test

作用:编译 src/test/java 目录下的测试代码,并运行单元测试(JUnit、TestNG)。

mvn test

执行过程

  • 先执行 mvn compile
  • 编译 src/test/java 目录下的测试代码
  • 运行测试(JUnit 或 TestNG)

适用场景

  • 运行项目中的单元测试,确保代码逻辑正确。

示例

mvn clean test

效果

  • 先清理 target/ 目录,然后运行所有测试。

2.4 mvn package

作用:将编译后的代码打包(如 JAR、WAR)到 target/ 目录。

mvn package

执行过程

  • 先执行 mvn test
  • 打包 target/classes/ 下的文件为 JAR 或 WAR

适用场景

  • 当需要生成可部署的 JAR/WAR 文件时。

示例

mvn clean package

效果

  • 清理旧的 target/ 目录,编译代码,运行测试,最终打包 JAR/WAR。

2.5 mvn install

作用:将打包好的 JAR/WAR 文件安装到 本地 Maven 仓库~/.m2/repository/),供其他项目使用。

mvn install

执行过程

  • 先执行 mvn package
  • target/ 目录中的 JAR/WAR 文件复制到本地 Maven 仓库

适用场景

  • 当开发多个模块(Module)时,一个模块可以安装到本地仓库,以便另一个模块引用。

示例

mvn clean install

效果

  • 清理旧的构建,编译代码,运行测试,打包,并安装到本地仓库。

2.6 mvn deploy

作用:将构建好的 JAR/WAR 部署到 远程 Maven 仓库,如 Nexus、Artifactory。

mvn deploy

执行过程

  • 先执行 mvn install
  • 上传 target/ 目录中的 JAR/WAR 文件到远程 Maven 仓库

适用场景

  • 当开发的库需要在团队内部共享时,可以部署到私有仓库(如 Nexus)。

示例

mvn clean deploy

效果

  • 清理、编译、测试、打包,并上传到远程仓库。

3. 其他常用 Maven 命令

3.1 查看依赖树

作用:列出所有项目依赖,包括传递性依赖,帮助分析依赖冲突。

mvn dependency:tree

示例

mvn dependency:tree

输出

[INFO] com.example:my-app:jar:1.0-SNAPSHOT
[INFO] ├─ org.springframework:spring-core:jar:5.3.9:compile
[INFO] ├─ commons-logging:commons-logging:jar:1.2:compile

3.2 强制更新依赖

作用:强制更新所有依赖,确保拉取最新版本。

mvn clean install -U

3.3 显示 Maven 有效的 POM 配置

作用:查看合并后的 pom.xml,帮助调试依赖管理。

mvn help:effective-pom

3.4 跳过测试

作用:构建时跳过单元测试,提高构建速度。

mvn clean package -DskipTests

3.5 运行单个测试

作用:只运行指定的测试类,而不是运行所有测试。

mvn test -Dtest=MyTestClass

3.6 运行 Web 项目

作用:如果使用 tomcat7-maven-plugin,可以直接运行 Web 项目。

mvn tomcat7:run

4. Maven 常用命令总结

命令作用
mvn clean删除 target/ 目录,清理构建文件
mvn compile编译 src/main/java 目录中的代码
mvn test运行 src/test/java 目录下的测试代码
mvn package生成 JAR/WAR 文件
mvn install将 JAR/WAR 安装到本地 Maven 仓库
mvn deploy将 JAR/WAR 部署到远程仓库
mvn dependency:tree查看项目的依赖树
mvn clean install -U强制更新依赖
mvn help:effective-pom查看合并后的 POM 配置
mvn clean package -DskipTests跳过测试打包
mvn test -Dtest=MyTestClass只运行指定的测试类

5. 总结

  • Maven 提供了一套标准的构建命令,涵盖了 清理、编译、测试、打包、安装、部署 等功能。
  • 通过 mvn clean install 可以完成一次完整的构建,并安装到本地仓库。
  • 通过 mvn deploy 可以将构建好的 JAR/WAR 部署到远程仓库,供团队共享。
  • 通过 mvn dependency:tree 可以分析依赖关系,帮助解决依赖冲突。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java生成随机字符串的两种方法

    java生成随机字符串的两种方法

    这篇文章主要为大家详细介绍了java生成随机字符串的两种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • SpringBoot获取maven打包时间的两种方式

    SpringBoot获取maven打包时间的两种方式

    这篇文章主要介绍了SpringBoot获取maven打包时间的两种方式,文章通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-05-05
  • SpringBoot项目中使用AOP的方法

    SpringBoot项目中使用AOP的方法

    本篇文章主要介绍了SpringBoot项目中使用AOP的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Java动态设置注解值及原理详解

    Java动态设置注解值及原理详解

    这篇文章主要介绍了Java动态设置注解值及原理详解,AnnotationInvocationHandler是注解的代理hander,通过反射获取类的注解时会通过AnnotationInvocationHandler创建代理对象并将数据存储到memberValues里,需要的朋友可以参考下
    2023-11-11
  • Java项目中添加外部jar包的两种方式(收藏版)

    Java项目中添加外部jar包的两种方式(收藏版)

    这篇文章主要介绍了java项目中添加外部jar包的两种方式,第二种方式是将外部jar包引入到本地maven仓库中,本文给大家讲解的非常详细,需要的朋友可以参考下
    2023-03-03
  • Java运算符>、>>、>>>三者的区别

    Java运算符>、>>、>>>三者的区别

    这篇文章主要介绍了Java运算符>、>>、>>>三者的区别,做了一个简单的对比,并用实例说明,需要的朋友可以参考下
    2014-06-06
  • SpringBoot接口数据加解密实战记录

    SpringBoot接口数据加解密实战记录

    现今对于大多数公司来说,信息安全工作尤为重要,下面这篇文章主要给大家介绍了关于SpringBoot接口数据加解密的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • SpringBoot Profile多环境配置方式

    SpringBoot Profile多环境配置方式

    这篇文章主要介绍了SpringBoot Profile多环境配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 关于Java中byte[] 和 String互相转换问题

    关于Java中byte[] 和 String互相转换问题

    这篇文章主要介绍了Java中byte[] 和 String互相转换问题,通过用例给大家介绍了通过String类将String转换成byte[]或者byte[]转换成String,具体实例代码跟随小编一起看看吧
    2022-01-01
  • 详解Java中AbstractMap抽象类

    详解Java中AbstractMap抽象类

    本篇文章给大家详细介绍了Java集合中的AbstractMap抽象类的相关用法以及知识点总结,需要的朋友参考下。
    2018-03-03

最新评论