首页 程序笔记 使用 Apache Maven - 命令及示例

使用 Apache Maven - 命令及示例

Apache Maven是一个用于项目管理和理解的开源工具。该工具基于项目对象模型 (POM) 概念。借助 Apache

Maven使开发人员能够在最短的时间内理解完整的开发周期和状态。这反过来又使构建过程变得更加容易,改进了开发实践并提供了高质量的项目信息。

与 Apache Maven 相关的惊人功能包括:

  • 易于设置和使用
  • 它可以同时处理多个项目
  • 只需最少或无需配置即可即时访问新功能和改进。
  • 它的范围非常广泛。您可以用Java和其他语言编写所需的插件。
  • 它鼓励使用 JAR 和其他相关依赖项的中央存储库。
  • 它有一个庞大而活跃的社区和图书馆可供使用

本指南将提供使用 Apache Maven 时涉及的常用命令,并在必要时提供示例。

安装 Apache Maven

可以按照我们页面上提供的指南在您的系统上安装 Apache Maven:

  • 如何安装 Apache Maven

要验证安装,请运行:

$ mvn -version
Apache Maven 3.9.4 (dfbb324ad4a7c8fb0bf182e6d91b0ae20e3d2dd9)
Maven home: /opt/maven
Java version: 11.0.20.1, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-71-generic", arch: "amd64", family: "unix"

使用 Apache Maven – 命令和示例

安装 Apache Maven 后,您可以根据需要继续使用它。以下是常用 Apache Maven 命令的列表以及示例:

MVN编译

该命令用于编译项目的主要源代码,位于项目的src/main/java中。该命令编译主目录中的所有 Java 文件。该命令不会执行编译阶段之外的任何任务。

mvn compile

示例输出:

[INFO] Compiling 1 source file with javac [debug target 1.8] to target/classes
[WARNING] bootstrap class path not set in conjunction with -source 8
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.363 s
[INFO] Finished at: 2023-09-18T13:18:32+03:00
[INFO] ------------------------------------------------------------------------

mvn编译器:编译

该命令用于为 Maven 项目编译 Java 源代码。它告诉 Maven 在编译代码时使用 maven-compiler-plugin。在这里,可以在 pom.xml 文件中自定义编译器的行为。您可以指定源和目标 Java 版本、编码等选项。要使用它,请运行:

$ mvn compiler:compile
[INFO] 
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- compiler:3.11.0:compile (default-cli) @ my-app ---
[INFO] Changes detected - recompiling the module! :input tree
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file with javac [debug target 1.8] to target/classes
[WARNING] bootstrap class path not set in conjunction with -source 8
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.435 s
[INFO] Finished at: 2023-09-18T13:19:02+03:00
[INFO] ------------------------------------------------------------------------

mvn编译器:testCompile

该命令用于编译Maven项目的测试类。

$ mvn compiler:testCompile
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- compiler:3.11.0:testCompile (default-cli) @ my-app ---
[INFO] Changes detected - recompiling the module! :source
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file with javac [debug target 1.8] to target/test-classes
[WARNING] bootstrap class path not set in conjunction with -source 8
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.614 s
[INFO] Finished at: 2023-09-18T13:19:38+03:00
[INFO] ------------------------------------------------------------------------

MVN包

将 Maven 项目构建为 JAR、WAR 等时使用。要使用它,请执行以下命令:

mvn package

示例输出:

[INFO] Building jar: /home/thor/mvn-projects/my-app/target/my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.826 s
[INFO] Finished at: 2023-09-18T13:20:05+03:00
[INFO] ------------------------------------------------------------------------

完成后,您将看到打印的 JAR 文件的位置。该命令在继续构建之前执行 compiletestCompiletest

MVN安装

此命令将构建并安装 JARWARpom.xml 等项目文件到本地存储库。要使用它,请运行:

mvn install

示例输出:

[INFO] Installing /home/thor/mvn-projects/my-app/pom.xml to /home/thor/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.pom
[INFO] Installing /home/thor/mvn-projects/my-app/target/my-app-1.0-SNAPSHOT.jar to /home/thor/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.838 s
[INFO] Finished at: 2023-09-18T13:21:06+03:00
[INFO] ------------------------------------------------------------------------

MVN部署

它将工件部署到在 distributionManagement 标签下的 pom.xml 文件中配置的远程存储库。要提供身份验证详细信息,请将其包含在 settings.xml 文件中。

mvn deploy

MVN验证

它用于验证并确保 Maven 项目的所有设置和所需信息都是正确的。

$ mvn validate
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.196 s
[INFO] Finished at: 2023-09-18T13:21:59+03:00
[INFO] ------------------------------------------------------------------------

mvn依赖:树

用于显示 Maven 项目上的依赖关系树。

mvn dependency:tree

示例输出:

[INFO] \- junit:junit:jar:3.8.1:test
[INFO] |  +- org.apiguardian:apiguardian-api:jar:1.0.0:test
[INFO] |  +- org.junit.platform:junit-platform-launcher:jar:1.2.0:test
[INFO] |  \- org.junit.platform:junit-platform-suite-api:jar:1.2.0:test
[INFO] |     \- org.junit.platform:junit-platform-commons:jar:1.2.0:test
[INFO] +- org.junit.jupiter:junit-jupiter-engine:jar:5.2.0:test
.....

此命令可用于查找未使用的依赖项并将其从 pom.xml 文件中删除。

mvn 原型:生成

该命令在生成项目框架时非常有用。它生成 JAR、Web 应用程序、Maven 站点和许多其他内容。

mvn archetype:generate

您还可以将该命令与所有必需的标志一起使用。例如

mvn archetype:generate -DgroupId=com.mycompany.app \
-DartifactId=my-app \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false

mvn 站点:站点

该命令用于创建项目的站点。要使用该命令,请运行:

mvn site:site

站点目录中将生成包含与您的项目相关信息的 HTML 文件。要查看它们,请访问项目的以下目录。

$ ls target/site/
css/                    dependency-info.html    index.html              plugins.html            summary.html            
dependencies.html       images/                 plugin-management.html  project-info.html       

MVN测试

这在运行 Maven 项目的测试用例时使用。例如:

$ mvn test
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.mycompany.app.AppTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.036 s -- in com.mycompany.app.AppTest
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.231 s
[INFO] Finished at: 2023-09-18T13:35:08+03:00
[INFO] ------------------------------------------------------------------------

MVN验证

当您需要验证是否满足质量标准时使用此命令。它运行测试用例并检查以确保一切正常。

mvn verify

示例输出:

INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.mycompany.app.AppTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.039 s -- in com.mycompany.app.AppTest
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] 
[INFO] --- jar:3.3.0:jar (default-jar) @ my-app ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.564 s
[INFO] Finished at: 2023-09-18T13:35:56+03:00
[INFO] ------------------------------------------------------------------------

mvn 清洁

该命令在删除Maven项目时使用。它清理并删除目标目录。要使用它,请切换到 Maven 目录并发出:

$ mvn clean
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- clean:3.2.0:clean (default-clean) @ my-app ---
[INFO] Deleting /home/thor/mvn-projects/my-app/target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.554 s
[INFO] Finished at: 2023-09-18T13:36:22+03:00
[INFO] ------------------------------------------------------------------------

如何使用 Maven 选项

Maven 允许使用多个选项。要查看可用选项的列表,请使用:

$ mvn -help
usage: mvn [options] [<goal(s)>] [<phase(s)>]

Options:
 -am,--also-make                        If project list is specified, also
                                        build projects required by the
                                        list
 -amd,--also-make-dependents            If project list is specified, also
                                        build projects that depend on
                                        projects on the list
 -B,--batch-mode                        Run in non-interactive (batch)
                                        mode (disables output color)
 -b,--builder <arg>                     The id of the build strategy to
                                        use
 -C,--strict-checksums                  Fail the build if checksums don't
                                        match
 -c,--lax-checksums                     Warn if checksums don't match
    --color <arg>                       Defines the color mode of the
                                        output. Supported are 'auto',
                                        'always', 'never'.
 -cpu,--check-plugin-updates            Ineffective, only kept for
                                        backward compatibility
 -D,--define <arg>                      Define a user property
 -e,--errors                            Produce execution error messages
 -emp,--encrypt-master-password <arg>   Encrypt master security password
 -ep,--encrypt-password <arg>           Encrypt server password
 -f,--file <arg>                        Force the use of an alternate POM
                                        file (or directory with pom.xml)
 -fae,--fail-at-end                     Only fail the build afterwards;
                                        allow all non-impacted builds to
                                        continue
......

以下是一些最常用的 Maven 选项:

mvn -o 包

该命令用于在离线模式下运行maven build命令。仅当所有必需的 JAR 文件已下载并可在本地存储库中使用时,才使用此命令。

mvn -o package

mvn -q 包

这会以安静模式运行构建过程,仅提供结果和错误。

mvn -q package

mvn -f dir/pom.xml 包

从另一个路径构建项目时使用该命令。您需要指定 pom.xml 文件的位置:

mvn -f dir/pom.xml package

mvn -T 4 全新安装

该命令用于使用提供的计数运行并行 Maven 构建。该命令可用于减少构建时间,因为模块可以同时构建。例如:

mvn -T 4 clean install

mvn -X 包

该命令用于显示 Maven 版本并以调试模式运行构建。在这里,所有消息都被打印出来。

mvn -X package

示例输出:

Apache Maven 3.9.4 (dfbb324ad4a7c8fb0bf182e6d91b0ae20e3d2dd9)
Maven home: /opt/maven
Java version: 11.0.20.1, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-71-generic", arch: "amd64", family: "unix"
...
INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.832 s
[INFO] Finished at: 2023-09-18T13:38:09+03:00
[INFO] ------------------------------------------------------------------------
[DEBUG] Shutting down adapter factory; available factories [file-lock, rwlock-local, semaphore-local, noop]; available name mappers [discriminating, file-gav, file-hgav, file-static, gav, static]
[DEBUG] Shutting down 'file-lock' factory
[DEBUG] Shutting down 'rwlock-local' factory
[DEBUG] Shutting down 'semaphore-local' factory
[DEBUG] Shutting down 'noop' factory

mvn -V 包

该命令打印 Maven 版本,然后继续构建过程。

mvn -V package
##OR
mvn -v;mvn package

mvn -DskipTests 包

该选项用于在构建过程中跳过测试:

mvn -DskipTests package
##OR
mvn -Dmaven.test.skip=true package

结论

本指南可以作为处理 Apache Maven 项目时的参考资料。我们提供了一些常用的 Maven 命令和示例用法。我希望这可以帮到你。

在我们的页面上查看更多信息:

  • 在 Ubuntu 上安装 DSpace 存储库
  • 使用 Ingress 在 Kubernetes 上部署 JFrog Artifactory
  • 在 SonarQube 和 Jenkins 中使用 Gradle 分析 Java 代码

3

站心网

Apache Maven是一个用于项目管理和理解的开源工具。该工具基于项目对象模型 (POM) 概念。借助 Apache Maven..

为您推荐

7大Git实用技巧和命令总结

Git 是一个非常强大的工具,它包含丰富的工具用以维护项目。本文介绍了一些 Git 日常使用过程中的实用技巧和命令,希望这些内容能够对大家有所帮助。Git diff通常情况下,我们会在自己的独立分支中完成需求开发,此..

使用 html2canvas 实现截图功能

html2canvas 是一个开源的 JavaScript 库,用于将网页上的 HTML 元素渲染成图像。它通过遍历页面的 DOM 树和计算样式,然后将其绘制到 <canvas> 元素上,最终生成图片。该库不依赖服务器端,而是通过浏览器端的 Java..

使用SuperWebSocket实现Web消息推送

在大部分Web系统中,我们可能遇到需要向客户端推送消息的需求。SuperWebSocket第三方库能让我们轻松的完成任务。SuperWebSocket第三方库可以从网上下载,不过通过Visual Studio Nuget安装更快。引用SuperWebSocket相..

.NET C# 使用Hook钩子实现全局监听键盘和鼠标

C# 是一种面向对象的编程语言,具有丰富的类库和工具支持,适用于各种类型的应用程序开发。Windows 提供了一种称为"钩子"(Hook)的机制,允许拦截并处理系统级别的事件,如键盘按键和鼠标移动。通过结合 C# 和 Hook..

C#使用 Attribute 实现 AOP 功能

在 C# 中,通过自定义 Attribute 并结合一些技术(如动态代理、反射等)可以实现 AOP(面向切面编程)。AOP 通常用于日志记录、性能监控、权限验证等横切关注点。以下是一个使用 C# Attribute 实现 AOP 功能的示例。..

ABP.Net Core使用教程(一)启动模版项目

只需要简单的3步:1,到官网下载模版项目 https://aspnetboilerplate.com/Templates2,用VS2017打开,将Web.Host设置为启动项3,在程序包管理器控制台(Nuget控制台)里设定默认项目为EntityFrameworkCore,执行命令..

C#中的线程安全的集合ConcurrentQueue使用示例

在多线程编程中,如何安全地在不同线程之间共享数据是一个非常重要的问题。C# 为我们提供了一些专门设计的线程安全集合,其中之一就是 ConcurrentQueue<T>。它是一种先进先出(FIFO)的数据结构,专门为多线程环境设..

CSS砌体布局示例和使用场景

CSS砌体布局(Masonry Layout)CSS砌体布局是一种网页布局技术,它的灵感来源于砖石墙的排列方式,类似于“拼图”或“拼砖”的效果。在砌体布局中,元素的排列并不完全遵循传统的网格布局规则,..

使用CSS columns-visibility实现砌体布局

CSS的 columns 属性(如 columns、column-count 和 column-width)通常用于多列文本布局,而不是直接用于砌体布局。然而,结合 columns 和 visibility 属性,可以在某些情况下实现类似砌体布局的效果,虽然它并不完..

使用System.Linq.Dynamic.Core扩展库动态构建 LINQ 查询

System.Linq.Dynamic.Core 是一个扩展库,用于在运行时动态构建 LINQ 查询,支持字符串形式的表达式解析和动态查询操作。它是 .NET 的一个强大工具,适合处理需要灵活定义查询逻辑的场景,例如动态过滤、排序、投影..

SQL语句中的EXISTS用法示例

EXISTS 是 SQL 中用于判断子查询是否返回结果的关键字。它通常用于 WHERE 子句中,结合子查询一起使用。如果子查询返回至少一行数据,EXISTS 会返回 TRUE,否则返回 FALSE。EXISTS 用法示例假设有两个表:employees..

小米开源智能家居平台 ha_xiaomi_home 使用示例

小米近期在 GitHub 上开源了名为“ha_xiaomi_home”的项目,即 Home Assistant 米家集成组件。该组件由小米官方支持,旨在让用户在 Home Assistant 中集成和控制小米 IoT 智能设备。主要特点:官方支持:..

C#13新特性 使用System.Threading.Lock简化线程同步

C# 13 引入了新的线程同步类型 System.Threading.Lock,它通过作用域管理的方式简化了锁的使用,使代码更加清晰可靠。本文将全面介绍 System.Threading.Lock 的功能、适用场景,并提供完整的运行示例程序。1. 什么是..

ASP.NET MVC最常用的设计模式代码示例

ASP.NET MVC 是一个基于分层架构的框架,其核心架构本身已经实现了 MVC 模式(Model-View-Controller)。除了 MVC 模式,开发者在使用 ASP.NET MVC 开发应用时,通常会结合其他设计模式以提高代码的可维护性、可扩展..

微软官方Microsoft.Extensions.AI库使用示例

Microsoft.Extensions.AI 库介绍Microsoft.Extensions.AI 是一个扩展库,用于在 .NET 应用程序中轻松集成人工智能(AI)服务,例如 OpenAI、Azure OpenAI 和其他支持文本生成或语言模型的 API。通过与 Microsoft.Ext..

.Net Core中Dapper的使用详解

1.安装Dapper这里直接使用Nuget安装。安装版本是1.50.5安装完成之后,发现Nuget下已经有了Dapper。2.创建DapperHelper接下来创建一个DapperHelper帮助类,来进行读取数据库连接字符串,打开数据库等操作。public cla..

最新CentOS7安装搭建shadowsocks服务端+客户端使用图文教程

使用的CentOS版本是7.9,其他版本也可以。超级推荐的是搭建shadowsocks服务端,安装配置都很简单,几分钟就搞定,客户端支持PC移动端,下面是安装shadowsocks的过程,只要复制粘贴命令就行了,文件夹路径都不需要改..

ASP.NET 使用Entity Framework (EF) 创建迁移修改SQLite数据库表结构

在 ASP.NET 中,使用 Entity Framework (EF) 创建并连接 SQLite 数据库是一种轻量级、高效的数据库管理方式。以下是详细步骤:安装必要的 NuGet 包安装EntityFrameworkCore.Sqlite包:Install-Package Microsoft.Ent..

Git 常用命令总结

基础命令初始化一个Git仓库:git init添加到暂存区:git add <file>提交到本地仓库:git commit -m <message>仓库版本号切换:git reset --hard commit_id查看提交历史:git log查看历史命令:git reflog丢弃工作区..

.NET C# EntityFramework(EF)连接SQLite代码示例

在.NET C#中使用Entity Framework(EF)连接SQLite数据库是一种常见的做法,可以有效地管理和操作数据。以下是一个简单的示例代码,展示了如何使用EF Core连接到SQLite数据库并执行基本的CRUD操作。首先,确保你已经..

发表回复

返回顶部