50% off 所有套餐限时优惠,起价 $2.48/mo
18 min left
网页与商业应用

Maven 完全掌握:详细命令、选项和速查表

Ada Lovegood By Ada Lovegood 18 min read Updated Feb 23, 2025
Maven 命令指南

自动化工具和开发工具是项目最关键的部分。这篇博客我们来深入讨论 Maven。Maven 是一个强大的自动化工具,专为 Java 项目设计。它简化了构建流程,为项目建立了统一的结构。这样一来,项目的管理和理解都变得轻松多了。本博客涵盖了 Maven 的几乎所有内容,包括大量命令和选项,可以让你的开发工作流程更高效。我们会探讨服务器和容器管理、源代码控制管理(SCM)以及用于签名制品的 GPG 等多个方面。另外,我们还会深入了解插件管理、程序集和分发的专用命令,以及生成项目网站和报告的方法。学完本指南后,你将全面掌握 Maven 命令和选项.

Maven 概览;项目生命周期

Maven 这个词在意第绪语中的意思是「知识的积累者」。这个含义恰好说明了 Maven 作为 Java 项目自动化工具的威力。Maven 简化了构建流程和项目管理,通过自动化各类任务并提供统一的构建系统来实现这一点。

现在,让我们拆解 Maven 的核心概念,这样你就能清楚地了解它是如何工作的 项目对象模型 (POM)POM 是一个 XML 文件,包含项目信息和配置详情。Maven 以 POM 为基础进行工作。Maven 从 POM 中读取项目的依赖、构建目录、源代码目录、测试源代码目录和构建目标,然后据此进行操作。

定义项目及其依赖项后 pom.xml,每当你运行 Maven 命令时,它都会读取 pom 文件来执行该命令的特定构建阶段。从创建项目到最终部署,项目经历一个完整的生命周期。这个生命周期定义了项目应该经历的阶段序列。每个阶段代表生命周期中的一个步骤,并执行具体的任务,比如编译源代码、运行测试以及将代码打包成可分发的格式。这些都使得 Maven 的项目生命周期成为一个需要理解的重要概念。所以让我们仔细看看 Maven 的生命周期阶段:

  1. Validate: 此阶段验证项目配置正确,所有必要信息齐全。
  2. Compile: 此阶段编译项目源代码。
  3. Test: 此阶段使用合适的单元测试框架测试编译后的源代码。
  4. Package: 此阶段将编译后的代码打包成可分发格式(例如 JAR、WAR)。
  5. Install: 安装阶段将包安装到本地仓库,使其可供同一计算机上的其他项目使用。
  6. Deploy: 此阶段将最终包复制到远程仓库,以便与其他开发者和项目共享。

这些阶段都有对应的 mvn 命令,我们会在 Maven 速查表的后续章节中介绍。这些命令是管理项目构建过程中最重要的工具。

Dependency Management

Maven 的核心功能之一是依赖管理。这个功能对 Maven 的性能至关重要,因为它让处理项目依赖变得更加简便。

Maven 如何管理依赖项

Maven 使用一个集中式仓库,称为 Maven Central Repository,该仓库托管了大量的库和插件。当项目需要某个依赖时,Maven 会自动从中央仓库下载所需的库,并将其存储在本地仓库中。本地仓库是你计算机上的缓存,可以减少后续构建的下载时间。

Maven 中的依赖在 pom.xml 文件的 <dependencies> 部分声明。每个依赖由一组坐标定义: groupId, artifactId, and version.

Dependency Scopes

在使用 Maven 时,你可以指定依赖的作用域。这个因素定义了依赖在类路径中的可见性和生命周期阶段。这样你就能了解哪个阶段需要此依赖。常见的作用域有:

  • Compile: 这是默认作用域,在未指定作用域时使用。该作用域的依赖在所有构建阶段都可用,并包含在最终包中。
  • Provided: 此作用域的依赖应该由运行时环境提供。它们在编译时使用,但不包含在最终包中。
  • Runtime: 这些依赖不需要用于编译,但在执行时需要。它们包含在运行时类路径中。
  • Test: 这些依赖仅用于编译和运行测试。它们不包含在运行时或最终包中。
  • System: 系统作用域与 provided 作用域类似,但你必须提供 Maven 将使用的 JAR 文件。该 JAR 必须位于系统路径中。

Transitive Dependencies

Maven 的强大功能之一是它能处理传递依赖。当项目声明一个依赖时,Maven 不仅会包含该依赖本身,还会包含它的所有依赖,以及这些依赖的依赖,等等。这种依赖链称为传递依赖。举个例子,假设你的项目依赖 spring-boot-starter-web,Maven 会自动包含 spring-boot-starter-web 所依赖的所有库,如 Spring Core、Spring MVC 和 Jackson。

现在你已经了解了 Maven 如何管理依赖的理论,让我们看看如何在实践中使用它:

mvn dependency:resolve

此命令可以解析并显示项目所需的所有依赖。你可以用它来查看项目依赖哪些库,并确保一切就绪。

mvn dependency:tree

使用此命令可以获得项目依赖的树形结构。它显示每个依赖之间的关系,有助于发现潜在冲突。

mvn dependency:analyze

此命令分析项目的依赖,找出任何未使用的构件。它可以帮助你清理项目,避免不必要的冗余。

Maven 的依赖管理功能简化了开发流程。它还能帮助你避免常见问题,保持项目结构整洁有序。

Execution

Maven 中的执行涉及在项目内运行特定任务或目标。这些任务的范围很广,从运行 Java 程序到执行外部脚本或命令。Maven 提供强大的插件来简化这些执行。这是 Maven 的另一个特点,使其成为自动化项目工作流不同部分的优秀工具。下面是 Maven 执行命令的关键概览:

mvn exec:java

该命令用于执行项目中的 Java 类。它对运行主类或测试独立的 Java 程序很有用,无需先打包它们。

mvn exec:exec

该命令允许你在 Maven 环境中执行任何外部程序或脚本。你可以用它来运行 shell 脚本、外部工具或构建过程中包含的其他程序。

Maven 中的执行命令帮助你自动化重复任务。你也可以用它们将外部工具和脚本集成到 Maven 构建生命周期中。总的来说,它们能帮助你更有效地管理任务。

服务器与容器管理

管理服务器和容器是开发和部署 Web 应用的重要阶段。Maven 通过强大的插件便利了这个过程,让你可以直接从构建流程中对各种服务器和容器运行、部署和管理 Web 应用。以下是管理服务器和容器的一些重要 Maven 命令:

mvn tomcat7:run

该命令使用 Apache Tomcat运行你的 Web 应用。它对本地开发和测试很有用,让你能快速部署和测试 Web 应用,而无需设置完整的服务器环境。

mvn jetty:run

该命令使用一个名为 Jetty的流行 Web 服务器来运行你的 Web 应用。与 Tomcat 一样,Jetty 因其轻量级和快速部署能力而非常适合开发和测试。

服务器和容器管理的工作原理

Maven 使用 tomcat7-maven-plugin and jetty-maven-plugin 等插件来管理服务器操作。这些插件允许你在构建生命周期中启动、停止和配置服务器。因此,在一致的环境中开发和测试 Web 应用变得容易得多。使用 Maven 配置文件为不同环境定义服务器配置,能帮助你管理开发、测试和生产环境中的不同设置。Maven 的这个特性还允许你在服务器插件中配置日志和监控。这样你就能跟踪服务器活动,快速排除问题。

SCM (Source Control Management)

任何开发项目的重要方面是源代码管理 (SCM)。开发团队需要 SCM 来随时间管理源代码的更改。Maven 有一套命令用于与 Git、Subversion 等 SCM 系统交互。这些命令可以自动化各种任务,如代码签入、代码签出和项目版本更新。以下是一些关键的 Maven SCM 命令及其选项:

mvn scm:checkin

你可以使用该 mvn 命令将项目更改签入 SCM。这条命令有助于自动化向源代码控制库提交更改的过程。这样最新更新肯定会被保存并与团队共享。

mvn scm:checkout

该 mvn 命令用于从 SCM 库签出项目代码,对获取项目的本地副本很有用。这样你可以确保自己使用的始终是最新版本的源代码。

mvn scm:update

该 mvn 命令用本地工作副本与 SCM 库中的最新更改同步。这条命令的作用是确保你的本地代码库与库同步,并包含团队其他成员所做的任何新更改。

mvn scm:status

该 mvn 命令显示本地工作副本相对于 SCM 库的状态。换句话说,它告诉你所有在本地进行但尚未提交到库的更改。

mvn scm:tag

该命令用于在 SCM 库中创建标签。标签标记项目历史中的特定点,如发布或重要里程碑。

Maven SCM 命令能大大简化管理项目源代码的过程。理解并使用这些命令将提高你和开发团队的效率和协作。

GPG (GNU Privacy Guard)

GNU Privacy Guard (GPG) 是一种密码学软件,允许用户加密和签名数据及通信。在 Maven 的语境中,GPG 用于签名工件,确保其真实性和完整性。这在将工件部署到公共库时很重要,因为它让用户能验证工件未被篡改。Maven 提供多条命令来使用 GPG 并简化签名和部署项目工件的过程。让我们看一些示例命令:

mvn gpg:sign

你可以使用该 Maven 命令用 GPG 签名项目工件。签名工件确保它们能被他人验证,并提供一层安全和信任。这条命令通常在构建过程中使用,在部署前签名 JAR、WAR 和其他类型的工件。

mvn gpg:sign-and-deploy-file

该 mvn 命令将签名和部署文件合并为单一步骤。当你想签名工件并立即将其部署到库时,可以使用它。这简化了你的流程,确保你想签名的工件能立即部署到库。

在 Maven 构建过程中加入 GPG 签名能增强软件的安全性和可靠性。这样用户就更容易信任和验证你的工件。

Release Management

发布管理在软件开发中非常重要。通过有效的发布管理,你可以确保软件版本得到适当管理、打包和部署。Maven 提供了一套命令来自动化和简化发布过程。下面是一些 Maven 选项和发布管理命令的示例:

mvn release:prepare

此 mvn 命令用于准备项目发布。它执行检查是否有未提交的更改、更新版本号等任务。 pom.xml 文件、在源代码管理(SCM)系统中标记发布版本,以及更新 pom.xml 文件升级到下一个开发版本。确保项目处于稳定状态,随时可以发布。

mvn release:perform

这个命令执行实际的部署流程。它从 SCM 中检出该标签对应的项目,该标签由 release:prepare 命令会构建项目,并将构件部署到指定的代码库。该命令确保构件是从发布准备时代码的精确状态构建的。

mvn release:clean

这个 mvn 命令会删除在以下过程中创建的所有发布描述符备份文件 release:prepare 过程。它清理环境,确保没有遗留的文件。这个命令为你提供一个干净的工作空间,防止后续发布出现问题。

使用发布管理命令可以简化发布流程、提高软件质量,确保发布得到有效管理。

Archetype

如果你需要根据预定义模板创建项目结构,Maven Archetype 插件是个不错的选择。本文会介绍 Maven 原型相关的主要命令。

mvn archetype:generate

You can use this mvn command to create a new project from an existing template, or “archetype.” This command guides the user through selecting an archetype and configuring the new project. So, it helps you set up a well-structured project.

mvn archetype:catalog

这个命令列出可用的项目模板,你可以用它们生成新项目。这对于探索 Maven 社区提供的各种模板,以及找到最适合你项目需求的模板很有帮助。

通过这两条 Maven 命令,你可以快速启动一个新项目。无论是简单的 Java 应用还是复杂的企业项目,Maven 原型都能为你提供一个可靠的起点。

Plugin Management

Maven 插件让开发者能够扩展 Maven 的功能,并在构建生命周期中自动执行各种任务。有效管理插件可以确保项目保持可维护性,构建结果也能够重现。本章将介绍 Maven 插件管理的核心命令。

mvn plugin:download

这个命令用于从仓库下载指定的 Maven 插件。当你需要确保某个插件在本地仓库中可用,然后再运行依赖该插件的其他 Maven 命令时,可以使用它。

mvn plugin:help

这个 Maven 命令会显示特定 Maven 插件的详细信息和文档。当你需要了解某个插件的各种目标、参数和配置选项时,可以使用它。

这些 Maven 插件管理命令可以优化构建流程、自动化工作流,并确保项目质量和一致性。

Assembly & Distribution

Maven 的打包和分发功能让开发者可以将项目打包成多种格式进行分发。你可以用它创建可执行的 JAR 文件、捆绑应用或包含依赖和其他资源的自定义分发包。本文将介绍 Maven 打包和分发的关键命令。

mvn assembly:assembly

这个命令为项目生成程序集。程序集是一个可分发的包,可以包含二进制文件、源代码、依赖项和其他资源。该命令使用 Assembly Plugin 根据提供的程序集描述符生成这些包。

mvn assembly:directory

这个 mvn 命令可以创建程序集的目录结构,但不会实际生成存档文件。在打包前,用这个命令来测试和验证程序集的内容和结构很有帮助。

学会使用 Maven 的程序集和分发命令,能够大幅简化应用的打包和发布流程。

网站生成命令

Maven 的网站命令是记录项目的好方法。这些命令为你的项目创建完整的文档网站。下面介绍基本的网站命令及其功能:

mvn site

mvn site 命令生成项目的站点文档,包含项目摘要、依赖报告、插件使用情况等项目相关信息。

mvn site:deploy

你可以用这个命令把生成的网站部署到远程服务器。这样做可以让更多人(比如团队成员或公众)访问你的文档。

mvn site:stage

此命令将网站暂存到本地目录。在将网站部署到远程服务器之前,你可以用这条命令在本地预览网站。

清晰有序的文档对项目开发至关重要。Maven Site 命令让你能够统一管理所有文档,改善开发团队之间的沟通。

WAR 和 JAR 命令

作为开发者,你一定知道在开发过程中能够将应用程序打包成不同格式有多重要。Maven 让你可以将应用程序打包成多种格式,包括 WAR(Web 应用存档)和 JAR(Java 存档)文件。当你需要将应用程序部署到服务器或分发库时,这些打包格式的价值就体现出来了。以下是生成 WAR 和 JAR 文件的关键 mvn 命令:

mvn war:war

这个命令会编译你的项目并将其打包为 WAR 文件。运行这个命令时,Maven 会在项目的 target 目录中生成 WAR 文件。

mvn jar:jar

此命令编译您的项目,并将其打包为项目目标目录中的 JAR 文件。

这两个命令可以帮助你完成部署和分发。用它们可以高效地管理和分发你的 Java 应用。

Reporting

任何软件项目都需要详细的报告来追踪进度。Maven 提供了强大的插件和 mvn 命令来生成各种报告。本节介绍两个 Maven 报告插件:Surefire 和 JaCoCo。

Surefire Plugin

使用这个插件可以在 Maven 项目中运行单元测试。它会生成详细的测试执行报告,让你确保代码的行为符合预期。

mvn surefire-report:report

该命令生成一个易于阅读和分析的单元测试报告。使用此命令,Maven 会在以下位置生成 HTML 报告: target/site 项目目录。此报告包含运行的测试数量、通过和失败的测试数,以及任何失败的详细堆栈跟踪。

JaCoCo Plugin

使用这个插件来测量和上报单元测试的代码覆盖率。这样你可以确保测试覆盖了整个代码库。

mvn jacoco:report

如果你想了解代码中哪些部分已被测试、哪些部分未被测试,这个命令会生成一份代码覆盖率报告。该命令生成的报告是 HTML 格式的报告,位于 target/site/jacoco 目录,显示类、方法和代码行的详细覆盖率指标。

这两个插件帮助你跟踪测试结果和代码覆盖率,让你深入了解代码库的健康状况和质量。

Build Customization

Maven 让你能够根据项目的具体需求定制构建过程。本节将介绍如何使用 Maven 配置文件和属性定义来自定义构建。

Maven Profiles

使用 Maven profiles,你可以为项目定义不同的配置,并根据系统属性、环境变量或自定义条件来激活这些配置。这样你可以针对不同的环境(如开发、测试和生产)自定义构建过程。你可以在 pom.xml 文件的 <profiles> 部分。还有 -p 后面跟上配置文件 ID 的选项将为你激活该配置文件。

Property Definitions

Maven 属性让你定义可以在整个项目中重复使用的值 pom.xml 文件。这些属性可以在 pom.xml、通过命令行或在外部属性文件中定义。你可以在 <properties> section of your pom.xml。定义这些属性后,你可以在整个 pom.xml file.

通过自定义 Maven 构建流程,你可以根据不同的环境和需求灵活调整项目。使用配置文件可以在不同的构建设置间切换,使用属性可以高效地重用和管理值。

Conclusion

这篇博客全面介绍了 Maven,并逐步引导你开发 Java 应用的整个过程。作为 Java 项目的强大自动化工具,Maven 在开发的每个阶段都提供不同的命令和功能。掌握这些命令的用法能显著提升你的开发流程质量。

FAQ

Maven 有什么用?

Maven 是一个用于 Java 项目的构建自动化和项目管理工具。它简化了构建流程,管理项目依赖关系,并提供了标准化的项目结构。Maven 还支持项目文档、报告和发布。

POM 在 Maven 中是什么?

Maven 是一个工具,用于自动化 Java 项目的构建流程和依赖管理。POM(项目对象模型)是 Maven 中的一个 XML 文件,包含项目信息和 Maven 用于构建项目的配置详情。POM 文件定义了项目依赖、插件、目标和其他构建配置。

Share

博客更新

Keep reading.

Odoo 评测功能图像,左侧为大标题文字,右侧为 Odoo 徽标,周围环绕着漂浮的应用界面面板,背景为柔和紫色云主题。
网页与商业应用

Odoo 综合评测:这款 ERP 是否适合你的业务

Odoo 是增长型企业最常考虑的 ERP 平台之一,原因很简单:它在一个地方承诺了很多功能。销售、会计、库存。

Jim SchwarzJim Schwarz 11 min read
开源 WordPress 替代方案特色图像,采用彩色渐变背景、桌面显示器、代码编辑器、模糊仪表板预览以及左侧大标题文本。
网页与商业应用

最佳开源 WordPress 替代方案,为开发者量身打造

WordPress 仍然重要,仍为大量网站提供良好支持。其插件库托管超过 62,000 个插件,主题库提供超过 14,000 个免费主题。

Jim SchwarzJim Schwarz 14 min read
Automad 与 WordPress 特色图像,展示两个平台的标志和标题,询问开发者应该选择哪个 CMS。
网页与商业应用

Automad 与 WordPress:两个顶级 CMS 平台的深度对比

Automad 和 WordPress 用两种截然不同的方式解决同一个问题。Automad 是扁平文件 CMS 和模板引擎,内容存储在文件中而不是数据库,而 WordPress

Jim SchwarzJim Schwarz 9 min read

Ready to deploy? From $2.48/mo.

独立云服务,始于2008年。AMD EPYC、NVMe,40 Gbps。14天退款保障。