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

如何获取Gradle项目的运行时依赖及其坐标、JAR文件路径?

Gradle遍历运行时全量依赖的自定义任务实现

前置说明

你之前提到的ResolvedDependecy拼写有误,正确类名是ResolvedDependency;另外runtime配置已经在Gradle 4.x版本后废弃,新版请使用runtimeClasspath配置,能覆盖所有运行时所需的传递性依赖。
你提到的几个术语对应关系如下:

  • Dependency:对应依赖的逻辑坐标信息(group、name、version)
  • Artifact:对应依赖的物理文件(比如JAR包、源包等)
  • Module:对应同一group+name下所有版本的依赖集合
    你需要的坐标信息在ResolvedDependency层面获取,JAR路径在对应的Artifact层面获取即可。

完整实现代码

Groovy DSL版本

import org.gradle.api.artifacts.ResolvedDependency

tasks.register('listAllRuntimeDeps') {
    // 所有解析逻辑放在执行阶段,不要放到配置阶段,避免拖慢构建速度
    doLast {
        def resolvedRuntimeConfig = project.configurations.runtimeClasspath.resolvedConfiguration
        // 遍历一级依赖,递归处理所有传递依赖
        resolvedRuntimeConfig.firstLevelModuleDependencies.each { resolvedDep ->
            walkResolvedDependency(resolvedDep)
        }
    }
}

/**
 * 递归解析依赖及其所有传递子依赖
 */
def walkResolvedDependency(ResolvedDependency dep) {
    // 打印依赖坐标
    println "坐标:${dep.moduleGroup}:${dep.moduleName}:${dep.moduleVersion}"
    // 打印该依赖对应的所有JAR文件路径
    dep.moduleArtifacts.each { artifact ->
        println "JAR路径:${artifact.file.absolutePath}"
    }
    println "---"
    // 递归处理子依赖
    dep.children.each { childDep ->
        walkResolvedDependency(childDep)
    }
}

Kotlin DSL版本

import org.gradle.api.artifacts.ResolvedDependency

tasks.register("listAllRuntimeDeps") {
    doLast {
        val resolvedRuntimeConfig = project.configurations.runtimeClasspath.get().resolvedConfiguration
        resolvedRuntimeConfig.firstLevelModuleDependencies.forEach { resolvedDep ->
            walkResolvedDependency(resolvedDep)
        }
    }
}

/**
 * 递归解析依赖及其所有传递子依赖
 */
fun walkResolvedDependency(dep: ResolvedDependency) {
    println("坐标:${dep.moduleGroup}:${dep.moduleName}:${dep.moduleVersion}")
    dep.moduleArtifacts.forEach { artifact ->
        println("JAR路径:${artifact.file.absolutePath}")
    }
    println("---")
    dep.children.forEach { childDep ->
        walkResolvedDependency(childDep)
    }
}

常见问题处理

  • 如果需要去重,可以自行维护一个Set<String>存储已经处理过的坐标(${group}:${name}:${version}),遇到重复的直接跳过即可
  • 如果需要过滤出仅JAR格式的artifact,可以加判断artifact.type == "jar"
  • 不要直接调用configurations.runtimeClasspath.files,这种方式只能拿到所有JAR文件,拿不到对应的坐标信息

内容的提问来源于stack exchange,提问作者Mridang Agarwalla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:54:02