如何过滤Gradle dependencies任务输出,仅保留项目间依赖?
过滤Gradle多项目构建中的项目间依赖
下面提供两种实用方法,帮你从gradle certainProject:dependencies的输出里递归提取仅项目间的依赖:
方法一:命令行直接过滤
利用系统自带的文本过滤工具,快速筛选出以project :开头的项目依赖(包括传递性的):
Linux/macOS 环境
执行以下命令,通过grep匹配直接依赖和缩进的传递依赖:
gradle certainProject:dependencies | grep -E "(^project :|^\s+--- project :)"
Windows 环境
用findstr实现类似效果:
gradle certainProject:dependencies | findstr /R "^project :\|^\s*--- project :"
这种方法无需修改Gradle配置,适合临时快速查看。
方法二:自定义Gradle任务
如果需要更灵活的输出格式,或者要对依赖做进一步处理,可以在模块的build.gradle(或根项目的build.gradle)中添加自定义任务:
// 自定义任务:递归列出所有项目依赖 task listProjectDependencies { doLast { // 遍历所有可解析的配置 configurations.each { config -> if (config.canBeResolved) { println "=== 配置 ${config.name} 下的项目依赖 ===" // 处理第一层级依赖 config.resolvedConfiguration.firstLevelModuleDependencies.each { dep -> collectProjectDeps(dep, 0) } } } } } // 递归收集项目依赖的辅助方法 void collectProjectDeps(dependency, int indent) { def indentStr = " " * indent // 识别项目依赖:无groupId,moduleName以冒号开头 if (dependency.moduleGroup == null && dependency.moduleName.startsWith(":")) { println "${indentStr}${dependency.moduleName}" // 递归处理该项目依赖的子依赖 dependency.children.each { childDep -> collectProjectDeps(childDep, indent + 1) } } // 第三方依赖直接跳过,不递归 }
添加完成后,执行以下命令即可得到结构化的项目依赖列表:
gradle certainProject:listProjectDependencies
这个方法的优势是可以根据需求定制输出,比如导出为文件、添加依赖类型标记等。
内容的提问来源于stack exchange,提问作者Rostik
相关产品推荐
相关产品推荐

