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

Gradle获取当前依赖版本:清理旧依赖版本任务误删问题

修复Gradle清理旧依赖版本任务的问题

你遇到的核心问题是依赖版本用了.+通配符后,任务没法正确识别当前项目实际依赖的具体版本,误删了所有缓存文件夹。下面是修复后的完整任务代码,以及关键逻辑的解释:

task cleanTerraCore(type: Delete) {
    doLast {
        // 定义TerraCore的缓存目录路径
        def depCacheDir = new File("${gradle.gradleUserHomeDir}/caches/minecraft/deobfedDeps/deobf/terrails/terracore/TerraCore")
        
        // 先检查目录是否存在,避免无意义操作
        if (!depCacheDir.exists()) {
            println "TerraCore缓存目录不存在,无需清理"
            return
        }

        // 从项目deobf配置中提取当前实际依赖的TerraCore具体版本
        def currentDep = project.configurations.deobfImplementation.resolvedConfiguration.firstLevelModuleDependencies.find {
            it.moduleGroup == 'terrails' && it.moduleName == 'terracore'
        }

        if (!currentDep) {
            println "未找到当前项目依赖的TerraCore,跳过清理"
            return
        }

        def currentVersion = currentDep.moduleVersion
        println "当前项目依赖的TerraCore版本:${currentVersion}"

        // 遍历所有版本文件夹,只删除非当前版本的旧缓存
        depCacheDir.eachDir { dir ->
            def dirVersion = dir.name
            if (dirVersion != currentVersion) {
                println "删除旧版本缓存:${dirVersion}"
                delete dir
            } else {
                println "保留当前版本缓存:${dirVersion}"
            }
        }
    }
}

关键修复点说明:

  • 精准获取实际依赖版本:不再依赖.+通配符,而是直接从Gradle解析后的配置中拿到项目实际使用的具体版本号(比如.+会被Gradle自动解析为最新可用版本,这里直接提取这个具体值)。
  • 增加前置检查:先判断缓存目录和依赖是否存在,避免空指针异常或无意义的执行流程。
  • 精确版本对比:用缓存文件夹的名称(即实际下载的版本号)和当前依赖的具体版本做直接对比,只删除不匹配的旧版本文件夹。

注意事项:

  • 如果你的项目中deobf配置不是deobfImplementation,记得改成你实际使用的配置名(比如deobfCompileOnly、deobfRuntimeOnly等)。
  • 测试阶段可以加--dry-run参数预览操作:./gradlew cleanTerraCore --dry-run,确认只会删除旧版本后再正式执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:03:32