文章中如果有图看不到,可以点这里去 csdn 看看。从那边导过来的,文章太多,没法一篇篇修改好。

Maven 常见命令详解

Maven 命令的核心格式是:mvn [options] [<goal(s)>] [<phase(s)>]。理解生命周期 (Lifecycle)阶段 (Phase) 是掌握 Maven 命令的关键。


一、Maven 核心概念:生命周期和阶段

Maven 的生命周期由一系列阶段组成,执行某个阶段会自动执行它之前的所有阶段。主要生命周期包括:

  1. clean:清理项目
    • pre-clean, clean, post-clean
  2. default (或 build):构建项目(最核心)
    • 关键阶段:validate -> compile -> test -> package -> verify -> install -> deploy
  3. site:生成项目站点文档
    • pre-site, site, post-site, site-deploy

命令的本质:当你运行 mvn install 时,Maven 会按顺序执行从 validateinstall 的所有阶段。


二、最常用命令详解

1. 项目编译与打包

  • mvn compile

    • 作用:编译项目的主源代码,编译结果输出到 target/classes 目录。
    • 对应阶段compile
  • mvn test

    • 作用:运行项目的测试用例(使用如 JUnit 等框架)。它会先自动执行 compile
    • 对应阶段test
    • 输出:测试报告位于 target/surefire-reports/
  • mvn package

    • 作用:将编译后的代码打包成可分发格式(JAR, WAR 等),具体格式由 pom.xml 中的 <packaging> 指定。它会先自动执行 test
    • 对应阶段package
    • 输出:打包文件位于 target/ 目录下(如 my-project-1.0.0.jar)。
  • mvn install

    • 作用:将打包好的文件安装到本地仓库。这样,本地其他 Maven 项目就可以直接引用这个构件作为依赖了。它会先自动执行 package
    • 对应阶段install
    • 场景:当你开发一个公共模块,并被其他本地项目依赖时,需要先 install
  • mvn deploy

    • 作用:将最终的构件(打包文件)部署到远程仓库(如 Nexus、Artifactory),供团队其他成员或整个公司使用。
    • 对应阶段deploy
    • 前提:需要在 pom.xml 中配置 <distributionManagement>
  • mvn clean

    • 作用:清理项目,删除 target 目录。通常与其他命令结合使用,以确保全新的构建。
    • 对应阶段clean
    • 常用组合
      • mvn clean compile:先清理再编译。
      • mvn clean package:先清理再打包(最常用组合之一)。
      • mvn clean install:先清理再安装(最常用组合之一)。

2. 依赖管理

  • mvn dependency:tree

    • 作用:以树形结构展示项目的所有依赖(包括传递性依赖)。这是解决 JAR 包冲突的终极利器!
    • 常用参数
      • -Dincludes=groupId:artifactId:过滤显示特定依赖,例如 mvn dependency:tree -Dincludes=org.springframework
      • -Dverbose:显示更详细的信息,包括被忽略的重复/冲突依赖。
  • mvn dependency:analyze

    • 作用:分析项目依赖,检查哪些已声明的依赖未被使用,以及哪些未声明的依赖但已被代码使用。
  • mvn dependency:resolve

    • 作用:列出所有已解析的依赖(下载到本地的依赖)。

3. 插件与工具

  • mvn archetype:generate

    • 作用:使用 Maven 原型(模板)快速创建一个新项目骨架。会以交互方式询问 groupId, artifactId, version 等信息。
  • mvn help:effective-pom

    • 作用:显示项目的有效 POM。有效 POM 是当前 POM、所有父 POM 和超级 POM(Maven 默认配置)合并后的最终结果,对于调试 POM 配置问题非常有用。

三、实用参数/选项 (Options)

这些参数可以附加在任何命令后面,以实现特定功能。

  • -DskipTests-Dmaven.test.skip=true

    • 作用跳过测试packageinstall 时会编译测试代码,但不执行测试。
    • 区别-DskipTests 会编译测试类但不运行;-Dmaven.test.skip=true 完全跳过测试的编译和执行。
  • -P<profile-id>

    • 作用:激活指定的构建剖面 (Profile)。Profile 允许你为不同环境(如开发、测试、生产)定义不同的配置。
    • 示例mvn clean package -Pprod 激活 idprod 的 profile 进行打包。
  • -X-e

    • 作用开启调试/异常输出。当命令执行失败时,使用这些参数可以打印出非常详细的堆栈跟踪和错误信息,便于排查问题。
    • -X:Debug 模式,输出大量执行日志。
    • -e:输出错误堆栈信息。
  • -pl <module_name>-am

    • 作用:在多模块项目中,仅对指定模块及其依赖的模块执行操作。
    • -pl:指定要构建的模块(Project List)。
    • -am:同时构建该模块所依赖的模块(Also Make)。
    • 示例:在根目录执行 mvn install -pl module-a -am,Maven 会先安装 module-a 依赖的其他模块,然后再安装 module-a 本身。
  • -U

    • 作用:强制检查远程仓库的更新(Update snapshots)。对于依赖了快照版本(SNAPSHOT)的项目,这个参数可以确保拉取到最新的快照构建。

四、常用命令组合总结

命令组合作用
mvn clean package(最常用) 清理并打包项目,生成 JAR/WAR 文件。
mvn clean install(最常用) 清理并安装到本地仓库,供其他本地项目依赖。
mvn clean package -DskipTests清理并打包,但跳过所有测试(常用于需要快速打包时)。
mvn clean deploy -Pprod清理项目,激活 prod 配置文件,并部署到远程仓库。
mvn dependency:tree -Dincludes=log4j分析项目中与 log4j 相关的所有依赖,用于排查冲突。
mvn compile exec:java -Dexec.mainClass="com.example.Main"编译并运行指定的主类(需要 exec-maven-plugin 插件)。

希望这份详解能帮助您更好地理解和使用 Maven!

posted @ 2025-09-18 17:58  NeoLshu  阅读(8)  评论(0)    收藏  举报  来源