1.3 Maven 常用命令


文档摘要

1.3 Maven 常用命令 1.3 Maven 常用命令 1.3.1 Maven 生命周期与命令概览 在深入具体命令之前,理解 Maven 的生命周期至关重要。Maven 生命周期定义了项目构建的各个阶段,而 Maven 命令则用于触发这些生命周期阶段的执行。 Maven 主要有三大内置生命周期: clean 生命周期: 用于清理项目,移除之前构建生成的文件。 default (build) 生命周期: 这是最核心的生命周期,涵盖了项目构建、测试、打包、安装和部署等环节。 site 生命周期: 用于生成项目站点文档。 每个生命周期又包含一系列有序的阶段(Phase)。例如, 生命周期包含 , , , , , 等阶段。

1.3 Maven 常用命令

1.3 Maven 常用命令

1.3.1 Maven 生命周期与命令概览

在深入具体命令之前,理解 Maven 的生命周期至关重要。Maven 生命周期定义了项目构建的各个阶段,而 Maven 命令则用于触发这些生命周期阶段的执行。

Maven 主要有三大内置生命周期:

  • clean 生命周期: 用于清理项目,移除之前构建生成的文件。

  • default (build) 生命周期: 这是最核心的生命周期,涵盖了项目构建、测试、打包、安装和部署等环节。

  • site 生命周期: 用于生成项目站点文档。

每个生命周期又包含一系列有序的阶段(Phase)。例如,default 生命周期包含 validate, compile, test, package, install, deploy 等阶段。当我们执行一个 Maven 命令时,实际上是触发了特定生命周期阶段的执行,同时也会顺序执行该阶段之前的所有阶段。

以下 Mermaid 图展示了 default 生命周期中一些关键阶段的顺序关系:

常用 Maven 命令速查表:

命令 描述 生命周期/阶段 常用场景
mvn clean 清理项目,删除 target 目录 clean 在构建之前清理旧的构建产物,确保构建环境的干净
mvn compile 编译项目的源代码 default src/main/java 目录下的 Java 源代码编译成 .class 文件,输出到 target/classes 目录
mvn test-compile 编译项目的测试源代码 default src/test/java 目录下的 Java 测试源代码编译成 .class 文件,输出到 target/test-classes 目录
mvn test 执行项目的单元测试 default 运行 src/test/java 目录下的单元测试用例,生成测试报告
mvn package 打包项目,根据 pom.xml 中定义的打包类型(如 jar, war, pom)生成相应的包文件到 target 目录 default 将项目打包成可发布的格式,例如生成 JAR 包、WAR 包等
mvn install 将项目安装到本地 Maven 仓库 default 将打包好的项目安装到本地 Maven 仓库 (~/.m2/repository),供本地其他 Maven 项目依赖使用
mvn deploy 将项目部署到远程 Maven 仓库 default 将打包好的项目部署到远程 Maven 仓库(如 Nexus, Artifactory),供团队或组织共享
mvn site 生成项目站点文档 site 根据项目信息和配置生成项目站点文档,通常包含项目报告、依赖关系、项目信息等
mvn validate 验证项目是否正确以及所有必要的资源是否可用 default 检查 pom.xml 文件是否有效,以及项目环境是否满足构建要求
mvn verify 运行任何检查,验证包是否有效且达到质量标准 default 在集成测试之后,进行更深入的检查,例如代码质量检查、安全漏洞扫描等,确保项目达到发布的质量标准
mvn dependency:tree 查看项目的依赖树 - 以树形结构展示项目的依赖关系,帮助分析和管理项目依赖
mvn help:effective-pom 查看 Maven 解析后的有效 pom.xml - 展示经过 Maven 继承、配置和 Profile 等处理后最终生效的 pom.xml 内容,用于诊断配置问题
mvn archetype:generate 使用 Archetype 生成项目骨架 - 基于 Maven Archetype 模板快速创建新的 Maven 项目,例如 Webapp 项目、Quickstart 项目等
mvn -vmvn --version 查看 Maven 版本信息 - 检查 Maven 安装是否成功,以及查看当前使用的 Maven 版本
mvn -hmvn --help 查看 Maven 帮助信息 - 获取 Maven 命令行的帮助信息,查看可用选项和命令

接下来,我们将逐个详细讲解这些常用命令,并通过代码实践加深理解。

1.3.2 mvn clean 命令详解与实践

mvn clean 命令用于清理项目构建的产物。它会删除项目根目录下 target 目录及其所有内容。target 目录是 Maven 默认的构建输出目录,包含了编译后的 .class 文件、打包后的 jar/war 包、测试报告等所有构建生成的文件。

命令格式:

mvn clean

实践案例:

  1. 创建一个简单的 Maven 项目 (quickstart archetype):

    mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false cd my-app
  2. 编译项目:

    mvn compile

    执行 mvn compile 后,会在项目根目录下生成 target 目录,其中包含 classes 目录,存放编译后的 .class 文件。

  3. 执行 mvn clean 命令:

    mvn clean

    执行 mvn clean 后,再次查看项目根目录,会发现 target 目录已经被删除。

内容详解:

  • 作用: mvn clean 命令的核心作用是清理构建环境,确保下一次构建是从一个干净的状态开始。

  • 使用场景:

    • 构建之前: 在开始新的构建之前,通常建议先执行 mvn clean,以移除之前构建产生的旧文件,避免旧文件干扰新的构建。

    • 解决构建问题: 当项目构建出现错误或异常时,有时清理 target 目录可以解决一些由于旧文件导致的奇怪问题。

    • 切换分支或环境: 在 Git 分支切换或者环境切换后,执行 mvn clean 可以确保项目构建环境与当前分支或环境一致。

  • 注意事项: mvn clean 命令会删除 target 目录下的所有内容,包括构建产物、测试报告等,执行前请确认是否需要保留这些文件。

1.3.3 mvn compile 命令详解与实践

mvn compile 命令用于编译项目的源代码。它会将 src/main/java 目录下的 Java 源代码编译成 .class 字节码文件,并输出到 target/classes 目录。

命令格式:

mvn compile

实践案例 (继续使用 my-app 项目):

  1. 确保项目已经创建并进入项目目录 (my-app)。

  2. 查看 src/main/java/com/example/App.java 文件,确认存在 Java 源代码。

  3. 执行 mvn compile 命令:

    mvn compile
  4. 查看 target/classes 目录,确认是否生成 com/example/App.class 文件。

内容详解:

  • 作用: mvn compile 命令是 Maven 构建生命周期中的核心阶段之一,负责将 Java 源代码转换成 JVM 可以执行的字节码。

  • 工作原理: Maven 编译器插件 (maven-compiler-plugin) 负责执行编译任务。插件会读取 pom.xml 文件中配置的编译参数(如 JDK 版本、编码方式等),并使用 Java 编译器 (javac) 编译源代码。

  • 依赖关系: mvn compile 命令依赖于 validate 阶段。在执行 compile 之前,Maven 会先执行 validate 阶段,验证 pom.xml 文件是否有效。

  • 输出目录: 编译后的 .class 文件默认输出到 target/classes 目录。

  • 使用场景:

    • 开发阶段: 在编写代码过程中,经常需要执行 mvn compile 来检查代码是否编译通过,以及尽早发现编译错误。

    • 构建流程: mvn compile 是构建流程中不可或缺的一步,为后续的测试、打包等阶段提供基础。

1.3.4 mvn test-compilemvn test 命令详解与实践

mvn test-compilemvn test 命令分别用于编译测试源代码和执行单元测试。

mvn test-compile 命令:

  • 作用: 编译 src/test/java 目录下的测试源代码,生成测试类的 .class 文件,输出到 target/test-classes 目录。

  • 命令格式:

    mvn test-compile

mvn test 命令:

  • 作用: 执行单元测试。默认情况下,Maven 使用 Surefire 插件来运行测试用例,并生成测试报告。测试用例通常位于 src/test/java 目录下。

  • 命令格式:

    mvn test

实践案例 (继续使用 my-app 项目,添加测试用例):

  1. src/test/java/com/example 目录下创建 AppTest.java 文件,添加一个简单的测试用例 (使用 JUnit):

    package com.example; import org.junit.Test; import static org.junit.Assert.assertTrue; public class AppTest { @Test public void shouldAnswerWithTrue() { assertTrue(true); } }
  2. 执行 mvn test-compile 命令:

    mvn test-compile

    查看 target/test-classes 目录,确认是否生成 com/example/AppTest.class 文件。

  3. 执行 mvn test 命令:

    mvn test

    查看控制台输出,应该看到测试用例执行结果 (例如 "Tests run: 1, Failures: 0, Errors: 0, Skipped: 0")。同时,在 target/surefire-reports 目录下会生成测试报告文件 (XML 和文本格式)。

内容详解:

  • mvn test-compile:

    • 为单元测试的执行做准备,编译测试代码。

    • mvn compile 类似,但作用于测试源代码目录。

  • mvn test:

    • 自动查找并执行 src/test/java 目录下的测试用例。

    • 默认使用 JUnit 或 TestNG 等测试框架。

    • 生成详细的测试报告,包括测试用例执行结果、耗时、错误信息等。

    • 测试失败会使构建失败。

  • 使用场景:

    • 保证代码质量: 单元测试是保证代码质量的重要手段,通过 mvn test 命令可以方便地运行所有单元测试,及时发现代码缺陷。

    • 持续集成/持续交付 (CI/CD): 在 CI/CD 流程中,mvn test 通常是构建流水线中的一个关键步骤,确保每次代码提交都经过自动化测试。

1.3.5 mvn package 命令详解与实践

mvn package 命令用于将项目打包成可发布的格式。具体的打包类型由 pom.xml 文件中的 <packaging> 元素定义,常见的打包类型包括 jar, war, pom 等。打包后的文件会生成在 target 目录下。

命令格式:

mvn package

实践案例 (继续使用 my-app 项目,打包成 JAR 包):

  1. 确认 pom.xml 文件中的 <packaging> 元素为 jar (默认 quickstart archetype 就是 jar)。

  2. 执行 mvn package 命令:

    mvn package
  3. 查看 target 目录,确认是否生成 my-app-1.0-SNAPSHOT.jar 文件 (版本号可能不同)。

内容详解:

  • 作用: mvn package 命令将编译、测试后的项目代码和资源文件打包成指定格式的归档文件,例如 JAR 包、WAR 包、POM 文件等。

  • 打包类型 <packaging>:

    • jar: 用于打包 Java 类库或独立的 Java 应用程序。

    • war: 用于打包 Web 应用程序,通常包含 JSP、Servlet、HTML、JS 等 Web 资源。

    • pom: 用于打包 Maven 项目的 POM 文件,通常用于父模块或聚合模块。

  • 打包过程: mvn package 命令会执行 default 生命周期中 package 阶段之前的所有阶段 (包括 compile, test 等)。

  • 输出文件: 打包后的文件默认输出到 target 目录,文件名通常包含 artifactId, versionpackaging 类型。

  • 使用场景:

    • 发布 Java 类库: 将 Java 类库打包成 JAR 包,方便其他项目引用。

    • 部署 Web 应用程序: 将 Web 应用程序打包成 WAR 包,部署到 Web 服务器 (如 Tomcat, Jetty)。

    • 构建父模块/聚合模块: 将 Maven 项目的 POM 文件打包成 POM 文件,用于构建父模块或聚合模块。

1.3.6 mvn install 命令详解与实践

mvn install 命令用于将项目安装到本地 Maven 仓库 (~/.m2/repository)。本地仓库用于存储项目构建的构件 (Artifacts),包括 JAR 包、POM 文件等。安装到本地仓库后,其他本地 Maven 项目就可以依赖这个项目。

命令格式:

mvn install

实践案例 (继续使用 my-app 项目):

  1. 先执行 mvn package 命令,确保项目已经打包。

  2. 执行 mvn install 命令:

    mvn install
  3. 查看本地 Maven 仓库 (~/.m2/repository),确认是否生成 com/example/my-app/1.0-SNAPSHOT 目录,并包含 my-app-1.0-SNAPSHOT.jarmy-app-1.0-SNAPSHOT.pom 文件。

内容详解:

  • 作用: mvn install 命令将打包好的项目构件 (JAR 包、POM 文件等) 安装到本地 Maven 仓库,使其可以被本地其他 Maven 项目引用。

  • 本地仓库: 本地 Maven 仓库默认位于用户主目录下的 .m2/repository 目录。

  • 安装过程: mvn install 命令会执行 default 生命周期中 install 阶段之前的所有阶段 (包括 compile, test, package 等)。

  • 构件坐标: 安装到本地仓库的构件会根据其 Maven 坐标 (groupId, artifactId, version) 组织目录结构。

  • 使用场景:

    • 本地项目依赖: 当一个 Maven 项目需要依赖另一个本地 Maven 项目时,需要先将被依赖的项目安装到本地仓库。

    • 开发阶段: 在本地开发和测试阶段,可以使用 mvn install 将当前模块安装到本地仓库,供其他模块依赖测试。

1.3.7 mvn deploy 命令详解与实践

mvn deploy 命令用于将项目部署到远程 Maven 仓库。远程仓库通常是团队或组织共享的仓库,例如 Nexus, Artifactory 等。部署到远程仓库后,其他团队成员或项目就可以通过 Maven 依赖管理使用这个项目。

命令格式:

mvn deploy

配置远程仓库:

要使用 mvn deploy 命令,需要在 pom.xml 文件中配置远程仓库信息。通常需要在 <distributionManagement> 元素中配置 <repository> (发布仓库) 和 <snapshotRepository> (快照版本仓库)。

示例 pom.xml 配置:

<distributionManagement> <repository> <id>releases</id> <name>Releases Repository</name> <url>http://your-remote-repo/repository/maven-releases/</url> </repository> <snapshotRepository> <id>snapshots</id> <name>Snapshots Repository</name> <url>http://your-remote-repo/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>

实践案例 (假设已配置远程仓库):

  1. 确保 pom.xml 文件中已经配置了 <distributionManagement> 元素,并配置了正确的远程仓库 URL 和认证信息 (如果需要)。

  2. 执行 mvn deploy 命令:

    mvn deploy
  3. 登录远程 Maven 仓库管理界面,确认是否成功部署了项目构件。

内容详解:

  • 作用: mvn deploy 命令将打包好的项目构件 (JAR 包、POM 文件等) 部署到远程 Maven 仓库,使其可以被团队或组织内的其他项目共享和依赖。

  • 远程仓库: 远程 Maven 仓库用于集中管理和共享 Maven 构件,常见的远程仓库管理工具包括 Nexus, Artifactory 等。

  • 部署过程: mvn deploy 命令会执行 default 生命周期中 deploy 阶段之前的所有阶段 (包括 compile, test, package, install 等)。

  • 仓库类型: 通常会配置两种类型的远程仓库:

    • Release 仓库: 用于发布正式版本 (Release 版本) 的构件。

    • Snapshot 仓库: 用于发布快照版本 (Snapshot 版本) 的构件。

  • 认证: 部署到远程仓库通常需要认证,需要在 Maven settings.xml 文件中配置仓库认证信息 (用户名和密码)。

  • 使用场景:

    • 团队协作: 将项目构件部署到远程仓库,方便团队成员共享和复用代码。

    • 企业级软件发布: 将企业内部的组件或服务发布到远程仓库,供企业内部其他项目使用。

    • 开源项目发布: 将开源项目发布到公共 Maven 仓库 (如 Maven Central),供全球开发者使用。

1.3.8 mvn site 命令详解与实践

mvn site 命令用于生成项目站点文档。Maven Site 插件可以根据项目信息、源代码、测试报告等生成包含项目文档、报告、依赖关系等信息的 HTML 站点。

命令格式:

mvn site

实践案例 (继续使用 my-app 项目):

  1. 执行 mvn site 命令:

    mvn site
  2. 查看 target/site 目录,会生成 HTML 站点文件,包括 index.html 等。

  3. 使用浏览器打开 target/site/index.html 文件,查看生成的项目站点文档。

内容详解:

  • 作用: mvn site 命令生成项目站点文档,提供项目信息、报告、依赖关系等可视化展示。

  • Maven Site 插件: Maven Site 插件负责生成站点文档,可以自定义站点外观和内容。

  • 站点内容: 默认生成的站点文档通常包含以下内容:

    • 项目信息: 项目名称、描述、版本、开发者信息等。

    • 项目报告: 测试报告 (Surefire 报告)、代码覆盖率报告 (Jacoco 报告)、代码质量报告 (Checkstyle 报告、PMD 报告) 等。

    • 依赖关系: 项目依赖树、依赖分析报告等。

    • 项目文档: 项目 README 文件、自定义文档等。

  • 使用场景:

    • 项目文档化: 为项目生成统一格式的站点文档,方便团队成员和用户了解项目信息。

    • 项目报告展示: 将项目构建过程中的各种报告集成到站点文档中,方便查看和分析。

    • 团队协作和沟通: 项目站点文档可以作为团队协作和沟通的平台,方便共享项目信息和进展。

1.3.9 mvn validatemvn verify 命令详解

mvn validatemvn verify 命令都是 Maven default 生命周期中的阶段,用于验证项目的有效性和质量。

mvn validate 命令:

  • 作用: 验证项目是否正确,以及所有必要的资源是否可用。

  • 执行阶段: default 生命周期中的 validate 阶段。

  • 主要验证内容:

    • pom.xml 文件是否有效,例如 XML 格式是否正确、必要的元素是否缺失等。

    • 项目环境是否满足构建要求,例如 JDK 版本、Maven 版本等。

  • 使用场景:

    • 在构建流程的早期进行基本验证,尽早发现项目配置或环境问题。

    • 通常在 compile 阶段之前执行。

mvn verify 命令:

  • 作用: 运行任何检查,验证包是否有效且达到质量标准。

  • 执行阶段: default 生命周期中的 verify 阶段。

  • 主要验证内容:

    • 集成测试结果验证。

    • 代码质量检查 (例如通过 Checkstyle, PMD, FindBugs 等插件)。

    • 安全漏洞扫描。

    • 其他自定义的验证逻辑。

  • 使用场景:

    • 在集成测试之后,进行更深入的验证,确保项目达到发布的质量标准。

    • 通常在 install 阶段之前执行。

内容对比:

命令 验证阶段 验证内容 目的
mvn validate validate pom.xml 文件有效性,项目环境 快速验证项目基本配置和环境,尽早发现问题
mvn verify verify 集成测试结果,代码质量,安全漏洞,自定义检查 深入验证项目质量,确保项目达到发布标准

实践说明:

mvn validatemvn verify 命令通常不需要单独执行,它们会作为 default 生命周期的一部分,在执行其他命令 (如 mvn compile, mvn package, mvn install, mvn deploy) 时自动被执行。

1.3.10 mvn dependency:tree 命令详解与实践

mvn dependency:tree 命令用于查看项目的依赖树。它可以以树形结构展示项目的直接依赖和传递依赖,帮助开发者分析和管理项目依赖关系。

命令格式:

mvn dependency:tree

实践案例 (继续使用 my-app 项目,假设添加了 junit 依赖):

  1. 确保 pom.xml 文件中已经添加了 junit 依赖:

    <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies>
  2. 执行 mvn dependency:tree 命令:

    mvn dependency:tree
  3. 查看控制台输出,会显示项目的依赖树,例如:

    [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ my-app --- [INFO] com.example:my-app:jar:1.0-SNAPSHOT [INFO] \- junit:junit:jar:4.11:test [INFO] \- org.hamcrest:hamcrest-core:jar:1.3:test

内容详解:

  • 作用: mvn dependency:tree 命令以树形结构展示项目的依赖关系,包括直接依赖和传递依赖。

  • 依赖树结构: 依赖树以项目自身作为根节点,一级子节点为直接依赖,二级子节点为直接依赖的依赖 (传递依赖),以此类推。

  • 依赖范围 (Scope): 依赖树中会显示每个依赖的 Scope (例如 test, compile, runtime 等)。

  • 解决依赖冲突: 通过查看依赖树,可以分析和解决依赖冲突问题。例如,当项目中存在多个版本相同的依赖时,可以通过 <dependencyManagement><exclusions> 等配置进行管理。

  • 使用场景:

    • 分析项目依赖: 快速了解项目的依赖关系,包括直接依赖和传递依赖。

    • 排查依赖问题: 当项目出现依赖冲突或依赖缺失等问题时,可以使用 mvn dependency:tree 命令分析依赖关系,定位问题所在。

    • 优化项目依赖: 通过分析依赖树,可以识别出不必要的依赖或重复依赖,优化项目依赖配置。

1.3.11 mvn help:effective-pom 命令详解与实践

mvn help:effective-pom 命令用于查看 Maven 解析后的有效 pom.xml 文件。由于 Maven 支持 POM 继承、Profile 配置、属性替换等特性,最终生效的 pom.xml 可能与原始 pom.xml 文件有所不同。mvn help:effective-pom 命令可以展示经过 Maven 处理后最终生效的 pom.xml 内容,帮助开发者诊断配置问题。

命令格式:

mvn help:effective-pom

实践案例 (继续使用 my-app 项目,假设父 POM 中定义了一些配置):

  1. 假设项目存在父 POM,并在父 POM 中定义了一些插件配置或属性。

  2. 在子项目 my-app 目录下执行 mvn help:effective-pom 命令:

    mvn help:effective-pom
  3. 查看控制台输出,会显示 Maven 解析后的有效 pom.xml 内容,包括从父 POM 继承的配置、Profile 配置、属性替换后的值等。

内容详解:

  • 作用: mvn help:effective-pom 命令展示 Maven 解析后的有效 pom.xml 内容,帮助开发者理解最终生效的 Maven 配置。

  • 有效 POM: 有效 POM 是经过 Maven 继承、Profile 合并、属性替换等处理后最终生效的 pom.xml 文件。

  • 诊断配置问题: 当 Maven 构建行为与预期不符时,可以使用 mvn help:effective-pom 命令查看有效 POM,分析配置是否正确,例如检查 Profile 是否生效、属性值是否正确等。

  • 理解 POM 继承和 Profile: 通过对比原始 pom.xml 和有效 POM,可以更好地理解 Maven POM 继承和 Profile 的工作原理。

  • 使用场景:

    • 诊断 Maven 配置问题: 当 Maven 构建行为异常时,使用 mvn help:effective-pom 命令查看有效 POM,排查配置问题。

    • 理解 POM 继承和 Profile: 学习和理解 Maven POM 继承和 Profile 特性。

    • 确认最终生效的配置: 确认最终生效的 Maven 配置,例如插件版本、属性值等。

1.3.12 mvn archetype:generate 命令详解与实践

mvn archetype:generate 命令用于使用 Archetype 生成项目骨架。Maven Archetype 是一种项目模板机制,可以根据预定义的模板快速创建各种类型的 Maven 项目,例如 Webapp 项目、Quickstart 项目、Spring Boot 项目等。

命令格式:

mvn archetype:generate

交互式模式:

执行 mvn archetype:generate 命令后,Maven 会进入交互式模式,提示用户选择 Archetype、输入 groupId, artifactId, version 等项目信息。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U