Gradle 出现 Could not resolve gradle
Gradle 在進行 sync 的時候會出現
Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve gradle:gradle:8.2.
查看異常信息發現 Gradle 無法下載 https://services.gradle.org/distributions/gradle-8.2-src.zip,這個鏈接重定向到 https://github.com/gradle/gradle-distributions/releases/download/v8.2.0/gradle-8.2-src.zip,Github 很難連上。
在 gradle-wrapper.properties 中 distributionUrl 設置為 https\://mirror.nju.edu.cn/gradle/gradle-8.2-bin.zip ,Gradle 仍然會下載 https://services.gradle.org/distributions/gradle-8.2-src.zip。為什么 Gradle 不使用鏡像源呢?翻了一下 Gradle 的源碼,發現這個鏈接是寫死的。
private
fun createSourceRepository() = ivy {
val repoName = repositoryNameFor(gradleVersion)
name = "Gradle $repoName"
setUrl("https://services.gradle.org/$repoName")
metadataSources {
artifact()
}
patternLayout {
if (isSnapshot(gradleVersion)) {
ivy("/dummy") // avoids a lookup that interferes with version listing
}
artifact("[module]-[revision](-[classifier])(.[ext])")
}
}
沒有任何方法可以直接修改這個鏈接。
要解決這個問題,可以直接為 Gradle 設置代理進行網絡加速。但是這樣會導致之前設置的 Maven 鏡像鏈接也會經過代理。
繼續翻看 Gradle 源碼發現有這樣一段代碼
private
fun sourceRootsOf(gradleInstallation: File, sourceDistributionResolver: SourceDistributionProvider): Collection<File> =
gradleInstallationSources(gradleInstallation) ?: downloadedSources(sourceDistributionResolver)
private
fun gradleInstallationSources(gradleInstallation: File) =
File(gradleInstallation, "src").takeIf { it.exists() }?.let { subDirsOf(it) }
gradleInstallation 存在 src 目錄的時候就不會繼續下載 gradle-8.2-src.zip。繼續往上翻,發現這個值就是 project.gradle.gradleHomeDir
直接把這個變量在 build.gradle.kts 中打印出來就是 %USERPROFILE%\.gradle\wrapper\dists\gradle-8.2-bin\4zwrvmkltlrdjhbk3gu6ax49g\gradle-8.2。這個文件夾就是 gradle-8.2-bin.zip 解壓后的。
于是直接把gradle-wrapper.properties里 distributionUrl 的 bin 改為 all,再把 distributionSha256Sum 修改為對應的值。也就是
distributionSha256Sum=5022b0b25fe182b0e50867e77f484501dba44feeea88f5c1f13b6b4660463640
distributionUrl=https\://mirror.nju.edu.cn/gradle/gradle-8.2-all.zip
直接 Build 通過,沒有任何問題。
gradle-8.2-all.zip 里面已經包含了 src 目錄,Gradle 不會繼續下載 src。
可以查詢 https://gradle.org/release-checksums 找到對應版本的 distributionSha256Sum。如果本來就沒用它,可以不改這個值。
總結
以上是生活随笔為你收集整理的Gradle 出现 Could not resolve gradle的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32CubeMX教程20 SPI
- 下一篇: xshell配置隧道转移规则