You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 20:40:06