过滤mvn dependency:tree输出 仅保留唯一不重复的依赖库
Maven dependency:tree 输出去重方案
最优原生方案(无需额外过滤)
如果你只需要拿到所有唯一依赖列表,不需要保留树形结构,直接使用Maven官方提供的dependency:list目标即可,它本身就会输出解析后的去重依赖条目,直接执行以下命令即可输出到指定文件:
mvn dependency:list -DoutputFile=unique_dependencies.txt -DappendOutput=false
参数说明:
-DoutputFile:指定结果输出的文件路径,执行后内容不会打印到控制台-DappendOutput=false:每次执行覆盖文件内容,避免历史残留数据干扰- 可选参数:可追加
-DincludeGroupIds=com.xxx、-DexcludeScope=test等参数过滤特定范围的依赖
手动处理dependency:tree原始输出的方案
如果你需要基于dependency:tree的原始输出来做去重处理,可按不同操作系统执行对应命令:
1. Linux / macOS 环境
第一步先导出原始依赖树到文件:
mvn dependency:tree > raw_tree.txt
第二步执行过滤去重命令:
grep '^\[INFO\]' raw_tree.txt | grep -E ' [+|\\-] ' | sed 's/^\[INFO\][ |+\\-]*//' | sort | uniq > unique_dependencies.txt
各环节作用:
- 过滤仅保留INFO级别的有效输出行,排除构建日志、报错等无关内容
- 筛选出实际包含依赖条目的行,去掉项目基础信息、构建成功提示等行
- 用sed删除行首的
[INFO]标记和树形连接符号,仅保留纯依赖坐标 - 排序后用uniq去重,输出到最终文件
2. Windows PowerShell 环境
第一步导出原始依赖树:
mvn dependency:tree | Out-File raw_tree.txt
第二步执行过滤去重:
Get-Content raw_tree.txt | Where-Object { $_ -match '^\[INFO\]\s*[|+\\- ]+.+:.+:.+' } | ForEach-Object { $_ -replace '^\[INFO\]\s*[|+\\- ]*', '' } | Sort-Object | Get-Unique | Out-File unique_dependencies.txt
内容的提问来源于stack exchange,提问作者Reid
相关产品推荐
相关产品推荐

