GitHub Actions自托管Linux构建KMM项目遇依赖解析错误
问题现象
在GitHub Actions自托管Linux运行器上执行./gradlew assembleRelease构建KMM项目时,出现以下错误:
:kmmmodule:detachedConfiguration3
Could not resolve :kotlin-native-prebuilt-linux-x86_64:1.8.10.
Required by:
project :kmmmodule
Could not resolve :kotlin-native-prebuilt-linux-x86_64:1.8.10.
Could not get resource 'https://download.jetbrains.com/kotlin/native/builds/releases/1.8.10/linux-x86_64/kotlin-native-prebuilt-linux-x86_64-1.8.10.tar.gz'.
18 actionable tasks: 18 executed
Could not HEAD 'https://download.jetbrains.com/kotlin/native/builds/releases/1.8.10/linux-x86_64/kotlin-native-prebuilt-linux-x86_64-1.8.10.tar.gz'.
download.jetbrains.com
切换Gradle(7.5、8.0、8.0.2等)和Kotlin(1.8.0、1.8.10、1.8.20等)版本后问题仍存在。
解决方案
1. 排查运行器网络连通性
- 在自托管运行器终端执行以下命令,测试能否访问JetBrains下载地址:
若返回非200状态码,说明运行器网络受限,需:curl -I https://download.jetbrains.com/kotlin/native/builds/releases/1.8.10/linux-x86_64/kotlin-native-prebuilt-linux-x86_64-1.8.10.tar.gz- 联系运维开放
download.jetbrains.com的访问权限; - 若运行器处于代理环境,在项目根目录的
gradle.properties中添加代理配置:systemProp.http.proxyHost=你的代理地址 systemProp.http.proxyPort=代理端口 systemProp.https.proxyHost=你的代理地址 systemProp.https.proxyPort=代理端口 # 若代理需要认证,添加以下配置 systemProp.http.proxyUser=代理用户名 systemProp.http.proxyPassword=代理密码 systemProp.https.proxyUser=代理用户名 systemProp.https.proxyPassword=代理密码
- 联系运维开放
2. 手动缓存Kotlin Native预构建包
- 本地复制缓存:在能正常构建的机器上,找到Gradle缓存目录下的对应包(路径为
~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-native-prebuilt-linux-x86_64/1.8.10/[SHA1哈希值]/kotlin-native-prebuilt-linux-x86_64-1.8.10.tar.gz),复制到自托管运行器的相同路径。 - Workflow中提前缓存:在GitHub Actions workflow里添加步骤,预下载并缓存该包:
注意:替换命令中的Kotlin版本号为项目实际使用的版本。- name: Cache Kotlin Native id: cache-kotlin-native uses: actions/cache@v3 with: path: ~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-native-prebuilt-linux-x86_64 key: ${{ runner.os }}-kotlin-native-1.8.10 - name: Download Kotlin Native if not cached if: steps.cache-kotlin-native.outputs.cache-hit != 'true' run: | SHA1=$(curl -sL https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-native-prebuilt-linux-x86_64/1.8.10/kotlin-native-prebuilt-linux-x86_64-1.8.10.pom | grep -E '<sha1>(.*)</sha1>' | sed 's/<sha1>//g;s/<\/sha1>//g') mkdir -p ~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-native-prebuilt-linux-x86_64/1.8.10/$SHA1 curl -o ~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-native-prebuilt-linux-x86_64/1.8.10/$SHA1/kotlin-native-prebuilt-linux-x86_64-1.8.10.tar.gz https://download.jetbrains.com/kotlin/native/builds/releases/1.8.10/linux-x86_64/kotlin-native-prebuilt-linux-x86_64-1.8.10.tar.gz
3. 检查Gradle仓库配置
确认项目settings.gradle.kts(或settings.gradle)中包含JetBrains官方仓库,避免镜像源缺失包:
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() maven { url = uri("https://maven.pkg.jetbrains.space/public/p/kotlin/kotlin-dev") } } }
4. 确认运行器系统架构
执行uname -m查看运行器架构:
- 若输出为
aarch64(ARM架构),需修改KMM配置使用对应架构的包,在build.gradle.kts中调整:
同时下载对应ARM版本的Kotlin Native包。kotlin { linuxArm64 { binaries { executable() } } }
内容的提问来源于stack exchange,提问作者YLS

