升级Gradle至8.2.1后出现配置缓存问题求助
解决Gradle 8.2.1配置缓存中执行外部Git命令的问题
问题原因
Gradle配置缓存要求配置阶段不能执行外部进程,你直接在build.gradle.kts的配置阶段调用git rev-parse命令获取commit hash,违反了这个规则,所以触发缓存错误。org.gradle.unsafe.configuration-cache=true仅放宽部分非核心限制,无法绕过外部进程的执行禁令。
有效解决方法
方法1:用Gradle Provider延迟执行Git命令
通过providers.exec将Git命令的执行延迟到执行阶段,避免在配置阶段触发外部进程:
// 定义一个Provider,仅在需要时执行Git命令 val gitCommitHashProvider = providers.exec { commandLine("git", "rev-parse", "--verify", "--short", "HEAD") workingDir = rootDir }.standardOutput.asText.map { it.trim() } android { defaultConfig { // 用Provider设置versionNameSuffix,配置阶段不会解析值 versionNameSuffix.set(gitCommitHashProvider.map { "-QA ($it)" }) } }
方法2:预生成Git commit hash到文件再读取
提前将commit hash写入文件,Gradle仅读取文件内容,不执行外部命令:
- 编写脚本生成hash文件(比如项目根目录的
git-hash.sh):
#!/bin/bash git rev-parse --verify --short HEAD > git-hash.txt
- 在
build.gradle.kts中读取文件内容:
val gitHashFile = file("git-hash.txt") val gitCommitHashProvider = providers.fileContents(gitHashFile).asText.map { it.trim() } android { defaultConfig { versionNameSuffix.set(gitCommitHashProvider.map { "-QA ($it)" }) } }
执行构建前先运行脚本生成git-hash.txt,也可以添加Gradle任务自动生成该文件。
内容的提问来源于stack exchange,提问作者Takeshi567
相关产品推荐
相关产品推荐

