本文介绍如何通过 maven 命令行工具,将项目所需的所有依赖(含传递依赖)完整下载并导出到指定目录,从而构建可移植的离线仓库或补全本地 `.m2/repository` 缺失的 artifacts。
在实际开发中,尤其是离线环境部署、CI/CD 构建隔离或团队共享依赖时,仅靠默认的 ~/.m2/repository 往往无法覆盖全部所需 artifacts——部分依赖可能因网络中断、镜像源缺失或未显式声明而未被拉取。此时,直接下载“一个完整的 Maven 仓库文件夹”并全局复用并不推荐(官方无预编译仓库包),但可通过标准 Maven 插件精准、可重现地生成项目级最小完备依赖集。
最高效的方式是使用 maven-dependency-plugin 的 copy-dependencies 目标:
mvn dependency:copy-dependencies -DoutputDirectory=./libs -DincludeScope=runtime -DstripVersion=true
✅ 关键参数说明:
-DoutputDirectory=./libs:指定输出目录(如 ./libs),所有 JAR 将扁平化存放于此; -DincludeScope=runtime:包含 compile 和 runtime 范围依赖(推荐,默认值为 runtime);也可设为 compile 或 test; -DstripVersion=true:移除文件名中的版本号(如 spring-core-6.1.0.jar → spring-core.jar),便于手动管理(慎用,可能引发冲突); 补充建议:添加 -DcopyPom=true 可同时复制 POM 文件,增强可追溯性。
⚠️ 重要注意事项:
此命令不会重建标准 Maven 仓库目录结构(如 org/springframework/spring-core/6.1.0/spring-core-6.1.0.jar),而是扁平化输出。若需严格模拟 .m2/repository 结构(例如供另一台机器 mvn install:install-file 批量安装),应改用 dependency:resolve-plugins + 自定义脚本,或借助 Apache Maven Wagon 工具同步远程仓库快照; 确保当前目录下存在有效的 pom.xml,且所有依赖均已正确声明(含 <scope> 和 <exclusions>); 如需下载整个多模块项目的全量依赖,请在根 POM 所在目录执行,并添加 -pl . -am 参数确保聚合解析。
? 进阶技巧:对于彻底离线场景,可结合 mvn dependency:go-offline 预热本地仓库(下载主 POM 及其所有传递依赖),再用 rsync 或压缩工具备份整个 ~/.m2/repository —— 这才是真正“可复用的仓库文件夹”,但体积较大且与项目耦合度低。
总之,Maven 的设计哲学是“按需拉取、声明驱动”,而非分发静态仓库。掌握 copy-dependencies 并合理配置作用域与输出策略,即可精准、轻量、可靠地满足绝大多数依赖导出需求。

评论(0)