能否导出Maven项目依赖列表并通过命令行批量下载依赖
Maven全量依赖导出+批量下载实现方法
完全可以实现,不需要额外安装第三方工具,用Maven原生插件就能完成全流程:
- 导出全量依赖到文件
参照mvn dependency:tree的依赖解析逻辑,直接用Maven依赖插件的输出参数就能把所有依赖(包括传递依赖)写入指定文件,不需要手动复制控制台输出:- 导出层级化依赖树结构:
mvn dependency:tree -DoutputFile=./dependency-tree.txt -Dverbose=false
加-Dverbose=true会输出所有被依赖仲裁忽略的冲突版本依赖,按需开启即可。 - 导出纯列表格式依赖(更方便后续批量处理):
mvn dependency:list -DoutputFile=./dependency-list.txt -DexcludeTransitive=false -DincludeScope=compile
其中-DincludeScope可以按需替换为runtime/test等,指定要导出的依赖范围。
- 导出层级化依赖树结构:
- 基于依赖列表批量下载
两种常用方式,按需选择即可:- 直接在项目目录执行预拉取命令,不需要手动解析导出的文件,Maven会自动解析全量依赖(含构建插件依赖)全部下载到本地仓库:
mvn dependency:go-offline
如果要把依赖下载到指定目录而不是默认的~/.m2/repository,加参数指定本地仓库路径即可:mvn dependency:go-offline -Dmaven.repo.local=./my-local-repo - 如果必须基于之前导出的依赖列表文件下载,可以先把文件里的依赖坐标整理成
groupId:artifactId:version的标准格式(每行一个),再写简单脚本逐行调用Maven命令下载,以Linux/macOS下的shell脚本为例:
因为导出的列表已经包含所有传递依赖,这里加# 从导出的列表文件中过滤出标准依赖坐标,去重 grep -oE '[a-zA-Z0-9._-]+:[a-zA-Z0-9._-]+:[a-zA-Z0-9._-]+' dependency-list.txt | sort | uniq > pure-coords.txt # 逐行下载依赖 while read artifact; do mvn dependency:get -Dartifact="$artifact" -Dtransitive=false done < pure-coords.txt-Dtransitive=false可以避免重复解析传递依赖,提升下载速度。
- 直接在项目目录执行预拉取命令,不需要手动解析导出的文件,Maven会自动解析全量依赖(含构建插件依赖)全部下载到本地仓库:
提示:如果下载时需要走私服/代理,直接用本地已经配置好的Maven settings.xml即可,不需要额外加参数。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

