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 命令示例:
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
生命周期是生成、编译、打包源代码的构建生命周期。
我们不能像直接执行 clean
和 site
生命周期一样,直接执行 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 会找到指定的构建阶段属于哪个构建生命周期,因此我们就不需要显式指定构建阶段属于哪个构建生命周期。