Kotlin DSL项目中无需手动添加kotlin-stdlib,因kotlin-gradle-plugin会自动注入;仅buildSrc、自定义插件、旧版Groovy脚本或跨平台项目等特定场景才需显式声明。

不需要手动添加 kotlin-stdlib,但前提是正确应用了 kotlin-gradle-plugin 且项目使用的是 Kotlin DSL(build.gradle.kts)或现代 Gradle 版本(≥ 7.0)+ 正确的插件配置。
kotlin-gradle-plugin 自动处理标准库依赖
Gradle 的 kotlin-gradle-plugin 在编译期会自动为 Kotlin 源码模块注入 kotlin-stdlib 依赖,只要满足以下条件:
- 插件通过
plugins { kotlin("jvm") }或id("org.jetbrains.kotlin.jvm")声明(推荐前者) -
sourceSets中已声明 Kotlin 源码路径(默认src/main/kotlin已被识别) - 没有显式禁用自动依赖(如设置
configureKotlinCompiler = false)
此时你运行 ./gradlew dependencies --configuration compileClasspath,能看到 org.jetbrains.kotlin:kotlin-stdlib-jdk8(或 jdk11/jdk17)已作为传递依赖存在。
什么时候必须手动添加 kotlin-stdlib?
仅在以下明确场景中才需手动声明:
-
你写的是 Gradle 自定义插件模块(即
buildSrc或独立插件项目),且该模块本身用 Kotlin 编写- 因为插件代码运行在 Gradle 进程中,不走普通项目编译流程,
kotlin-gradle-plugin不起作用 - 必须显式添加:
implementation(kotlin("stdlib-jdk8"))(JDK 8)或kotlin("stdlib-jdk17")(JDK 17+)
- 因为插件代码运行在 Gradle 进程中,不走普通项目编译流程,
-
你用的是旧版 Groovy
build.gradle且未启用插件 DSL(即仍用apply plugin: 'kotlin'+buildscript块)- 此时需手动在
dependencies中加:compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion"
- 此时需手动在
-
你在非 JVM 平台(如 Kotlin/JS、Kotlin/Multiplatform)构建,且未启用对应插件(
kotlin-js、kotlin-multiplatform)- 标准库变体不同(如
kotlin-stdlib-js),插件不会自动选对,得自己配
- 标准库变体不同(如
容易踩的坑
-
buildSrc模块里写了 Kotlin 代码却没加kotlin("stdlib")→ 编译报错Unresolved reference: listOf等基础函数 - 在 Android 项目中误用
kotlin-stdlib-jre8(已废弃)→ 构建失败或运行时NoClassDefFoundError - 使用
gradlePlugin {}块开发插件,但忘记在dependencies里加implementation(gradleApi())和kotlin("stdlib")→ 插件类加载失败 - 多模块项目中,某个子模块是纯 Kotlin 工具库(无插件应用),却依赖了
kotlinx.coroutines等需要 stdlib 的库 → 编译期找不到扩展函数
标准库是否“手动加”,本质取决于 谁在编译它、在哪种上下文中运行。大多数应用模块不用管,但 buildSrc、自定义插件、旧式 Groovy 配置、跨平台项目,就得自己盯住 kotlin("stdlib-*") 的版本和 scope。


















