本文介绍通过 maven 命令行工具快速导出项目所需全部依赖 jar 文件到本地指定目录的方法,无需手动下载或配置远程仓库镜像,适用于离线环境部署、依赖归档或仓库初始化等场景。
本文介绍通过 maven 命令行工具快速导出项目所需全部依赖 jar 文件到本地指定目录的方法,无需手动下载或配置远程仓库镜像,适用于离线环境部署、依赖归档或仓库初始化等场景。
在实际开发中,我们常遇到需要将项目所有 Maven 依赖(即 ~/.m2/repository 中已解析的 artifacts)完整导出为可移植的 JAR 包集合——例如为无网络环境准备离线依赖包、构建轻量级分发包,或迁移/重建本地仓库。此时,直接复制 .m2/repository 并不可靠:它可能包含冗余模块、未使用的传递依赖,甚至缺失部分 artifact(如因构建中断、依赖范围限制或 provided/test 范围未解析导致)。
更可靠的方式是
基于当前项目的 pom.xml,精准拉取并导出编译与运行时必需的所有依赖
。Maven 官方插件 maven-dependency-plugin 提供了开箱即用的解决方案:
✅
关键参数说明:
-DoutputDirectory: 指定目标输出目录(如 ./libs),该目录将被自动创建;
-DincludeScope: 控制依赖范围,默认为 compile,推荐显式设置为 runtime(覆盖 compile + runtime),避免引入 provided 或 test 等非运行时必需的 JAR;
其他实用选项:
-DexcludeTransitive=true —— 仅导出直接依赖(禁用传递依赖);
-Dclassifier=sources —— 同时导出源码包(需对应 artifact 存在 sources classifier);
-DoverWriteReleases=false —— 避免重复覆盖已存在文件(提升增量执行效率)。
⚠️
注意事项:
执行前请确保项目 pom.xml 已正确声明所有必要依赖,且本地已成功执行过 mvn compile(以保证依赖已解析并缓存至 .m2);
该命令
不会下载新 artifact 到 .m2
,而是从本地仓库中拷贝已存在的 JAR;若提示“Missing artifact”,请先运行 mvn dependency:resolve 或 mvn compile 触发下载;
输出目录中的 JAR 文件名默认不带版本号(如 spring-core.jar),如需保留完整坐标命名(如 spring-core-5.3.31.jar),添加参数:-DuseRepositoryLayout=false -Dmdep.useBaseVersion=true。
?
进阶建议:
对于多模块项目,可在根 pom.xml 中配置插件绑定到 package 生命周期,实现构建时自动归档依赖:
综上,mvn dependency:copy-dependencies 是高效、可控、可复现的依赖导出方案,比手动管理 .m2 更精准,也比下载第三方“全量仓库镜像”更安全、更轻量。合理组合参数,即可满足从开发调试到生产部署的多样化依赖分发需求。
mvn dependency:copy-dependencies -DoutputDirectory=./libs -DincludeScope=runtime
org.apache.maven.plugins
maven-dependency-plugin
3.6.1
copy-dependencies
package
copy-dependencies
${project.build.directory}/libs
runtime
