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

Gradle为何强制指定Kotlin版本?如何自定义指定?

Gradle与Kotlin版本配置问题

问题背景

我有一个简单的Gradle项目,初始配置如下:

plugins {
    kotlin("jvm")
}

使用不同Gradle版本运行时,关联的Kotlin版本不同:

$ ./gradlew wrapper --gradle-version=7.5
$ ./gradlew --version
Kotlin:       1.6.21

$ ./gradlew wrapper --gradle-version=7.4.2
$ ./gradlew --version
Kotlin:       1.5.31

$ ./gradlew wrapper --gradle-version=7.2
$ ./gradlew --version
Kotlin:       1.5.21

可见Gradle会自动决定Kotlin插件的版本。

我希望自行指定Kotlin版本,于是修改配置:

plugins {
    kotlin("jvm") version "1.6.10"
}

但Gradle报错:

Plugin request for plugin already on the classpath must not include a version

我已检查项目,未在其他地方显式定义Gradle版本。

额外问题解答

为什么Gradle会自动决定Kotlin插件版本?

Gradle这么做是为了保证兼容性:Kotlin插件与Gradle本身存在紧密依赖,不同版本的Gradle对Kotlin的API支持程度不同。官方会预先测试并绑定经过验证的Kotlin版本,避免用户因版本不匹配出现兼容性问题,同时简化项目配置流程。

版本对应关系有官方文档吗?

有的,Gradle官方维护了Kotlin插件与Gradle版本的对应表,涵盖每个Gradle版本默认绑定的Kotlin版本,以及支持的最低/最高Kotlin版本范围。

核心问题:如何指定自定义Kotlin版本?

你遇到的报错是因为通过kotlin("jvm")引入插件时,Gradle已经通过默认绑定机制把对应版本的插件放到了类路径中,此时再显式添加version会引发冲突。以下是三种可行的解决方法:

方法1:通过全局属性指定

在项目根目录的gradle.properties文件中添加:

kotlin.version=1.6.10

该配置会覆盖Gradle默认的Kotlin版本,所有Kotlin相关插件都会统一使用这个版本。

方法2:用版本解析策略强制指定

在项目的settings.gradle.kts(Groovy项目用settings.gradle)中添加版本解析规则:

pluginManagement {
    resolutionStrategy {
        eachPlugin {
            if (requested.id.namespace == "org.jetbrains.kotlin") {
                useVersion("1.6.10")
            }
        }
    }
}

这种方式更灵活,可单独针对Kotlin插件指定版本,不影响其他插件的默认配置。

方法3:显式声明完整插件ID与版本

修改build.gradle.kts,使用完整的插件ID替代简化写法,避免触发Gradle的默认版本绑定:

plugins {
    id("org.jetbrains.kotlin.jvm") version "1.6.10"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:54:21