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

如何禁用多平台依赖项的原生编译以优化CI构建?

解决Ktor JVM项目构建时Kotlin/Native编译器自动下载的问题

你的场景是:基于JVM的Ktor后端项目依赖了一个多平台项目,依赖配置如下:

dependencies {
    implementation(project(":api"))
}

在CI环境构建时,Gradle会自动下载并安装Kotlin/Native编译器,还提示iOS相关原生目标无法构建,浪费了不必要的构建时间。可以通过以下几种方式解决:

方法1:仅构建依赖项目的JVM目标

因为你的主项目是JVM环境,完全不需要构建:api模块的Native目标,直接在CI构建命令中指定只处理JVM相关任务即可。
如果原来的构建命令是./gradlew build,修改为:

./gradlew :api:jvmBuild build

或者通过排除Native目标的任务来避免:

./gradlew build -x :api:iosArm64MainClasses -x :api:iosSimulatorArm64MainClasses -x :api:iosX64MainClasses

方法2:通过Gradle属性禁用Native相关处理

在项目根目录的gradle.properties文件中添加以下配置:

# 隐藏禁用Native目标的警告
kotlin.native.ignoreDisabledTargets=true
# 禁止自动下载Kotlin/Native编译器
kotlin.native.disableCompilerDownload=true

这样既不会弹出目标禁用的警告,也不会触发Konan编译器的下载和安装流程。

方法3:修改多平台项目的目标配置(若有权限修改:api模块)

如果可以编辑:api模块的构建脚本(build.gradle.kts或build.gradle),可以动态控制目标的添加,比如只在本地开发环境保留Native目标,CI环境仅保留JVM目标:

Kotlin DSL(build.gradle.kts)示例:

kotlin {
    jvm {
        // 保持原有的JVM目标配置
    }

    // 仅在非CI环境添加iOS等Native目标
    if (System.getenv("CI") == null) {
        iosArm64()
        iosSimulatorArm64()
        iosX64()
    }
}

Groovy DSL(build.gradle)示例:

kotlin {
    jvm {
        // 保持原有的JVM目标配置
    }

    // 仅在非CI环境添加iOS等Native目标
    if (System.getenv("CI") == null) {
        iosArm64()
        iosSimulatorArm64()
        iosX64()
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 00:50:04