Maven 包含大量可以执行的命令。Maven 命令是一种构建生命周期、构建阶段和构建目标的混合体,因为可能会有点混乱。因此,我们将在本教程中描述常见的 Maven 命令,并解释它们执行的构建生命周期、构建阶段和构建目标。

不过,我将首先列出一些常见的 Maven 命令,并简要说明它们的作用。在这个常见 Maven 命令列表之后,我对 Maven 命令结构进行了描述。

常用 Maven 命令

下面是一个常见 的 Maven 命令列表以及它们的功能描述。请注意,即使 Maven 命令在下表是在多行中显示出来的,当输入到 windows 命令行或 linux shell 时,也应把它当作是单条命令行。

Maven 命令 描述
mvn —version 打印出正在执行的 Maven 的版本。
mvn clean 清除 Maven 通常会在其中构建项目的 target 目录。
mvn package 构建项目,并把结果 JAR 文件打包到 target 目录。
mvn package -Dmaven.test.skip=true 构建项目,并把结果 JAR 文件打包到 target 目录 - 在构建时不执行单元测试。
mvn clean package 清除 target 目录,并构建项目,把结果 JAR 文件打包到 target 目录。
mvn clean package -Dmaven.test.skip=true 清除 target 目录,并构建项目,把结果 JAR 文件打包到 target 目录。 - 在构建时不执行单元测试。
mvn verify 运行项目中找到的所有集成测试。
mvn clean verify 清理 target 目录,并运行项目中找到的所有集成测试。
mvn install 构建 Maven POM 文件所描述的项目,并且将结果制品(JAR)安装到本地 Maven 仓库中。
mvn install -Dmaven.test.skip=true 在不运行单元测试的情况下构建 Maven POM 文件所描述的项目,并且将结果制品(JAR)安装到本地 Maven 仓库中。
mvn clean install 清理 target 目录, 构建 Maven POM 文件所描述的项目,并且将结果制品(JAR)安装到本地 Maven 仓库中。
mvn clean install -Dmaven.test.skip=true 清理 target 目录, 在不运行单元测试的情况下构建 Maven POM 文件所描述的项目,并且将结果制品(JAR)安装到本地 Maven 仓库中。
mvn dependency:copy-dependencies 将依赖从远程 Maven 仓库复制到本地 Maven 仓库。
mvn clean dependency:copy-dependencies 清理项目,并将依赖从远程 Maven 仓库复制到本地 Maven 仓库。
mvn clean dependency:copy-dependencies package 清理项目,将依赖从远程 Maven 仓库复制到本地 Maven 仓库,并且把项目打包。
mvn dependency:tree 基于 pom.xml 文件中配置的依赖,打印出项目的依赖树。
mvn dependency:tree -Dverbose 基于 pom.xml 文件中配置的依赖,打印出项目的依赖树。包括重复的、过渡的依赖。
mvn dependency:tree -Dincludes=com.fasterxml.jackson.core 打印出项目中依赖于 com.fasterxml.jackson.core 制品的依赖。
mvn dependency:tree -Dverbose -Dincludes=com.fasterxml.jackson.core 打印出项目中依赖于 com.fasterxml.jackson.core 制品的依赖。包括重复的、过渡性的依赖。
mvn dependency:build-classpath 基于 pom.xml 文件中配置的依赖,打印出运行项目(应用程序)所需的类路径。

请记住,当执行 Maven 的 clean 目标时,target 目录会被删除,这意味着会丢失之前构建的所有已编译的类。也就是说,Maven 就必须从头开始重新构建项目的所有东西,而不是只编译上次构建以来被修改的类。这样子会减慢构建时间。不过,有时候有一个干净的、新鲜的构建是很好的,比如,在发布产品之前 — 主要是因为自我感觉是从头开始构建和处理的。

Maven 命令结构

一条 Maven 命令由两个元素组成:

  • mvn
  • 一到多个构建生命周期、构建阶段或者构建目标

如下是一条 Maven 命令示例:

  1. mvn clean

这条命令由 执行 Maven 的 mvn 命令以及名为 clean 的构建生命周期组成。

如下是另一条 Maven 命令示例:

mvn clean install

这条 Maven 命令执行 clean 构建生命周期,以及在 default 构建生命周期中的 install 构建阶段。

你可能想知道如何看待构建生命周期、构建阶段和构建目标之间的区别。我们稍后再谈。

构建生命周期、阶段和目标

正如在构建生命周期、构建阶段和构建目标一节的简介部分所述,Maven 由三个主要的构建生命周期组成:

  • clean
  • default
  • site

在每个构建生命周期内,都有构建阶段。在每个构建阶段内,都有构建目标。

我们可以执行要么构建生命周期、要么构建阶段,要么构建目标。当执行一个构建生命周期时,会执行该构建生命周期内所有的构建阶段(以及构建目标)。

当执行一个构建阶段时,会在执行该构建阶段内所有构建目标。Maven 还可以在所需构建阶段的构建生命周期中的早期执行所有构建阶段。

构建目标被分配给一到多个构建阶段。当构建阶段被执行时,该构建阶段中所有目标都被执行。我们还可以直接执行一个构建目标。

执行构建生命周期、阶段和目标

在运行 mvn 命令时,可以传一到多个参数给它。这些参数指定构建生命周期、构建阶段或者构建目标。比如,要执行 clean 构建生命周期,请执行这条命令:

mvn clean

要执行 site 构建生命周期,请执行这条命令:

mvn site

执行默认生命周期

default 生命周期是生成、编译、打包源代码的构建生命周期。

我们不能像直接执行 cleansite 生命周期一样,直接执行 default 构建生命周期,而是必须执行在 default 构建生命周期内的指定构建阶段。

default 构建生命周期内中的最常用构建阶段为:

构建阶段 描述
validate 验证项目是否正确以及所有必要的信息是否可用。这还可以确保依赖被下载了。
compile 编译项目的源代码。
test 用合适的单元测试框架对编译的源代码执行测试。这些测试不应该需要打包或者部署代码。
package 将编译后的代码打包成可分发的格式,比如 JAR。
install 将打包的文件安装到本地仓库,以便其它项目中可以用作本地依赖。
deploy 复制最终包文件到远程仓库,与其它开发者以及项目共享。

只需在 mvn 命令后添加上构建阶段,就可以执行一个构建阶段,比如:

mvn compile

这个示例 Maven 命令执行 default 构建生命周期的 compile 构建阶段。这条 Maven 命令还执行 default 构建生命周期中的所有早期构建阶段,也就是 validate 构建阶段。

执行构建阶段

我们可以通过将构建阶段的名称传给 Maven 命令,执行位于构建生命周期内的构建阶段。如下是一些构建阶段命令示例:

mvn pre-clean

mvn compile

mvn package

Maven 会找到指定的构建阶段属于哪个构建生命周期,因此我们就不需要显式指定构建阶段属于哪个构建生命周期。