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
相关产品推荐
相关产品推荐

