雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

使用 Apache Maven - 命令及示例

2024-07-06 67

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 代码

更新于:4个月前
赞一波!3

文章评论

评论问答