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

Gradle构建生成全项目排序依赖列表及解决安全警告方案

解决Gradle依赖列表生成的安全与执行时机问题

核心实现思路

要满足生成完整依赖列表、排序、仅显式触发、消除警告的需求,关键在于将配置解析逻辑延迟到任务执行阶段,同时通过惰性任务注册确保仅在需要时运行。

完整代码实现

在项目根目录的build.gradle中添加以下代码:

tasks.register("listDependencies") {
    // 仅当显式调用该任务时才执行
    onlyIf { gradle.startParameter.taskNames.contains("listDependencies") }

    doLast {
        // 按名称排序所有项目(含根项目)
        def sortedProjects = allprojects.sort { it.name }
        
        sortedProjects.each { project ->
            println "\n=== ${project.name} 依赖列表 ==="
            
            // 解析runtimeClasspath配置(可替换为compileClasspath等其他配置)
            def resolvedConfig = project.configurations.runtimeClasspath.resolvedConfiguration
            // 按group、name、version排序所有依赖(直接+传递)
            def sortedDependencies = resolvedConfig.allDependencies.sort { a, b ->
                int groupCompare = a.group.compareTo(b.group)
                if (groupCompare != 0) return groupCompare
                int nameCompare = a.name.compareTo(b.name)
                if (nameCompare != 0) return nameCompare
                a.version.compareTo(b.version)
            }
            
            sortedDependencies.each { dep ->
                // 过滤掉项目间依赖(如果不需要显示可保留)
                if (!(dep instanceof ProjectDependency)) {
                    println "* ${dep.group}:${dep.name}:${dep.version}"
                }
            }
        }
    }
}

关键细节说明

  1. 仅显式触发任务
    通过onlyIf条件判断,只有当命令行中包含listDependencies任务时,才会执行后续逻辑,完全不影响正常构建流程。

  2. 消除不安全配置解析警告
    将resolvedConfiguration的解析逻辑放在doLast块中——这部分代码仅在任务执行阶段运行,而非配置阶段,避免了Gradle对提前解析配置的安全警告。

  3. 排序保证可追踪性

    • 项目按名称排序,确保输出结构固定;
    • 依赖按group→name→version排序,方便对比不同构建的依赖变化,快速定位版本差异。
  4. 依赖版本准确性
    使用resolvedConfiguration获取的依赖版本是Gradle最终解析后的确定版本,不会出现null值,同时包含所有传递依赖。

使用方式

在终端执行以下命令即可生成依赖列表:

./gradlew listDependencies

内容的提问来源于stack exchange,提问作者Aaron Digulla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:25:43