菜鸟科技网

Maven命令大全,从编译到部署,这些核心命令你都掌握了吗?

Maven 核心概念速览

在深入命令之前,先快速回顾几个核心概念,这能帮助你更好地理解命令的作用:

Maven命令大全,从编译到部署,这些核心命令你都掌握了吗?-图1
(图片来源网络,侵删)
  • POM (Project Object Model): pom.xml 文件,是 Maven 项目的核心配置文件,定义了项目的基本信息、依赖、插件、构建配置等。
  • 生命周期: Maven 的构建过程是一系列有序的阶段,主要有三个内置的生命周期:
    • default: 最核心的生命周期,包括 compile, test, package, install, deploy 等阶段。
    • clean: 用于清理项目,如删除 target 目录。
    • site: 用于生成项目站点文档。
  • 阶段: 生命周期中的一个步骤,compile
  • 目标: 阶段的具体实现,一个阶段可以绑定一个或多个目标。package 阶段通常绑定 maven-jar-plugin:jar (对于 Java 项目) 或 maven-war-plugin:war (对于 Web 项目) 目标。
  • 插件: 用于执行特定任务(如编译、打包、代码检查等)的工具,目标通常由插件提供。
  • 仓库: 存放依赖和插件的地方,主要有:
    • 本地仓库: 你本机上的一个目录,用于缓存下载的依赖和插件。
    • 远程仓库: 如 Maven 中央仓库,或私服,当本地仓库没有所需依赖时,Maven 会从远程仓库下载。

Maven 命令大全

命令的基本格式是:mvn [options] [goal(s)]

项目创建与构建

这是最常用的一组命令,用于创建新项目和进行日常构建。

命令 说明 示例
mvn archetype:generate (旧版) 交互式创建 Maven 项目骨架。 mvn archetype:generate
mvn -B archetype:generate (旧版) 非交互式创建项目,需指定参数。 mvn -B archetype:generate -DgroupId=com.mycompany -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
mvn -DarchetypeGroupId=... -DarchetypeArtifactId=... ... (新版) 直接指定参数创建项目,更推荐。 mvn -B org.apache.maven.archetypes:maven-archetype-quickstart:generate -DgroupId=com.example -DartifactId=my-first-app
mvn clean 执行 clean 生命周期,删除 target 目录。 mvn clean
mvn compile 执行 default 生命周期的 compile 阶段,编译 src/main/java 下的源代码。 mvn compile
mvn test-compile 编译 src/test/java 下的测试代码。 mvn test-compile
mvn test 执行 test 阶段,编译并运行所有测试用例。 mvn test
mvn package 执行 package 阶段,编译代码、运行测试,并将项目打包(如 JAR, WAR)。 mvn package
mvn install 执行 install 阶段,打包后将项目安装到本地仓库,供其他本地项目引用。 mvn install
mvn deploy 执行 deploy 阶段,将打包好的构件部署到远程仓库(如私服)。 mvn deploy
mvn verify 执行集成测试,并运行检查,确保质量达标。 mvn verify
mvn site 生成项目站点,包含报告(如 Javadoc, Test Report)。 mvn site

常用组合:

命令 说明
mvn clean compile 清理并编译项目。
mvn clean package 清理、编译、测试并打包,这是最常用的构建组合之一。
mvn clean install 清理、编译、测试、打包并安装到本地仓库。

依赖管理

用于管理项目的外部库。

Maven命令大全,从编译到部署,这些核心命令你都掌握了吗?-图2
(图片来源网络,侵删)
命令 说明 示例
mvn dependency:tree 以树形结构显示项目的所有依赖及其传递性依赖。 mvn dependency:tree
mvn dependency:resolve 解析项目依赖,并将其下载到本地仓库。 mvn dependency:resolve
mvn dependency:copy-dependencies 将所有依赖复制到指定目录(默认是 target/dependencies)。 mvn dependency:copy-dependencies -DoutputDirectory=target/lib
mvn dependency:analyze 分析依赖,找出 used but undeclared (使用但未声明) 和 declared but unused (声明但未使用) 的依赖。 mvn dependency:analyze
mvn enforcer:enforce 使用 maven-enforcer-plugin 强制执行某些规则,如禁止使用旧版依赖。 mvn enforcer:enforce (需在 pom.xml 中配置规则)
mvn versions:display-dependency-updates 检查依赖是否有可用的新版本。 mvn versions:display-dependency-updates (需先配置 versions 插件)

插件

用于执行各种构建任务。

命令 说明 示例
mvn plugin:help 查看插件的详细信息,包括其目标和参数。 mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin -Ddetail
mvn [plugin-name]:[goal-name] 直接执行插件的某个目标。 mvn tomcat7:run (启动 Tomcat 服务器)
mvn exec:java 使用 maven-exec-plugin 直接运行一个 Java 类的 main 方法。 mvn exec:java -Dexec.mainClass="com.example.App"

信息与帮助

用于获取项目信息或帮助。

命令 说明 示例
mvn help:system 打印所有可用的环境变量和系统属性,非常有用于调试环境问题。 mvn help:system
mvn help:effective-pom 打印项目的有效 POM,即合并了所有父 POM 和默认配置后的最终 POM。 mvn help:effective-pom
mvn help:effective-settings 打印有效的 settings.xml 文件内容。 mvn help:effective-settings
mvn archetype:generate -Dfilter=<keyword> 创建项目时,通过关键词过滤可用的骨架。 mvn archetype:generate -Dfilter=webapp
mvn validate 验证项目是否正确,以及所有信息是否完整。 mvn validate

高级功能

命令 说明 示例
mvn clean install -DskipTests 跳过测试,编译并安装,但不运行测试用例。 mvn clean install -DskipTests
mvn clean install -Dmaven.test.skip=true 跳过测试编译和执行,比 -DskipTests 更彻底。 mvn clean install -Dmaven.test.skip=true
mvn clean package -P<profile_id> 激活 Profile,在构建时使用指定的 Profile。 mvn clean package -Pprod
mvn clean install -DforkCount=0 单线程测试,对于某些 IDE 集成问题或调试时有用。 mvn clean install -DforkCount=0
mvn clean compile -q 安静模式,只输出错误或警告信息。 mvn clean compile -q
mvn clean compile -X 调试模式,输出 Maven 的调试信息,用于排查依赖问题。 mvn clean compile -X
mvn clean compile -B 批处理模式,非交互式,适合在 CI/CD 环境中使用。 mvn clean install -B
mvn clean compile -Dmaven.repo.local=/path/to/local/repo 指定本地仓库路径 mvn clean compile -Dmaven.repo.local=/my/custom/repo
mvn clean compile -Dcheckstyle.skip=true 跳过插件执行,跳过 Checkstyle 代码检查。 mvn clean install -Dcheckstyle.skip=true -Dspotbugs.skip=true

常用 Maven 生命周期阶段速查表

阶段 描述 通常绑定插件目标
validate 验证项目是否正确,以及所有信息是否完整。 -
initialize 初始化构建状态,例如设置属性。 -
generate-sources 生成任何包含在编译阶段中的源代码。 -
process-sources 处理源代码,过滤任何值。 maven-resources-plugin:resources
generate-resources 生成包含在包中的任何资源。 maven-resources-plugin:resources
process-resources 处理资源文件,过滤任何值。 maven-resources-plugin:resources
compile 编译项目的源代码。 maven-compiler-plugin:compile
process-classes 处理编译生成的文件,对 Java 类进行字节码增强。 -
generate-test-sources 生成任何包含在编译阶段中的测试源代码。 -
process-test-sources 处理测试源代码,过滤任何值。 maven-resources-plugin:testResources
generate-test-resources 创建测试资源。 maven-resources-plugin:testResources
process-test-resources 处理测试资源文件,过滤任何值。 maven-resources-plugin:testResources
test-compile 编译测试源代码。 maven-compiler-plugin:testCompile
process-test-classes 处理编译生成的测试文件,对 Java 测试类进行字节码增强。 -
test 使用适当的单元框架运行测试。 maven-surefire-plugin:test
prepare-package 在实际打包之前执行任何必要的操作为打包做准备。 -
package 将编译后的代码打包成可分发的格式,如 JAR、WAR。 maven-jar-plugin:jar / maven-war-plugin:war
pre-integration-test 执行集成测试所需的操作,例如设置所需的环境。 -
integration-test 处理和部署包到集成测试可以运行的环境。 -
post-integration-test 执行集成测试后需要的操作,例如清理环境。 -
verify 运行任何检查以验证包是否有效,并满足质量标准。 maven-checkstyle-plugin:check / maven-failsafe-plugin:verify
install 将包安装到本地仓库,以供其他项目作为依赖使用。 maven-install-plugin:install
deploy 将最终包复制到远程仓库,以供其他开发人员和项目使用。 maven-deploy-plugin:deploy

总结与最佳实践

  1. 善用 mvn help:effective-pom: 当你的 pom.xml 配置变得复杂时,这个命令可以帮你看到最终的、合并后的配置,是排查问题的利器。
  2. 理解生命周期: 理解 clean, default, site 三个生命周期以及它们内部的阶段,是掌握 Maven 的关键,知道 mvn package 内部做了什么(validate, initialize, ..., compile, test, package),你就不会滥用命令。
  3. 不要滥用 mvn install: 在多模块项目中,如果你只想编译和测试当前模块,而不是把它安装到本地仓库,使用 mvn clean compilemvn clean test 会更快。
  4. 依赖分析: 定期运行 mvn dependency:analyze,保持依赖列表的整洁,避免引入未使用的库。
  5. 使用 Profile: 为不同环境(开发、测试、生产)配置不同的参数,通过 -P 参数激活,是管理环境差异的最佳实践。

希望这份大全能帮助你更高效地使用 Maven!

Maven命令大全,从编译到部署,这些核心命令你都掌握了吗?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇