13.6.1.3 Kotlin 2.3.x 兼容性指南

原文链接: https://kotlinlang.org/docs/compatibility-guide-23.html

13.6.1.3 Kotlin 2.3.x 兼容性指南

保持语言的现代性 和 舒适的更新 是 Kotlin 语言设计中的基本原则。前者指出,阻碍语言演进的构造应该被移除;后者指出,这种移除应事先充分沟通,以便代码迁移尽可能顺畅。

虽然大多数语言变更已经通过其他渠道公布过(例如更新日志或编译器警告),但本文汇总了所有这些变更,为从 Kotlin 2.2 迁移到 Kotlin 2.3 提供完整参考。本文还包含与工具相关的变更信息。

基本术语

本文介绍了以下几种兼容性:

  • 源码级:源码不兼容的变更会让原本能正常编译(无错误或警告)的代码不再能编译
  • 二进制级:如果互换两个二进制产物不会导致加载或链接错误,则称它们是二进制兼容的
  • 行为级:如果同一个程序在应用变更前后的行为不同,则该变更属于行为不兼容

请记住,这些定义仅针对纯 Kotlin。从其他语言(例如 Java)的视角来看 Kotlin 代码的兼容性不在本文讨论范围内。

语言

放弃对 1.8 和 1.9 的 -language-version 支持

Issue:KT-76343、KT-76344。组件:编译器 不兼容变更类型:源码级 简要说明:从 Kotlin 2.3 开始,编译器不再支持 -language-version=1.8。对于非 JVM 平台,对 -language-version=1.9 的支持也已被移除。弃用周期:- 2.2.0:使用 -language-version 指定 1.8 和 1.9 版本时报告警告 - 2.3.0:在所有平台上把 1.8 版本、在非 JVM 平台上把 1.9 版本的 -language-version 警告提升为错误

对带类型别名的推断类型报告上界约束违规错误

Issue:KTLC-287 组件:核心语言 不兼容变更类型:源码级 简要说明:此前编译器从不对推断类型的上界约束违规报错。Kotlin 2.3.0 修复了这一点,使该错误在所有类型参数上一致地报告。弃用周期:- 2.2.20:对隐式类型实参造成的边界违例报告弃用警告 - 2.3.0:把隐式类型实参上 UPPER_BOUND_VIOLATED 的警告提升为错误

禁止在 inline 和 crossinline lambda 上使用 @JvmSerializableLambda 注解

Issue:KTLC-9 组件:核心语言 不兼容变更类型:源码级 简要说明:你不能再把 @JvmSerializableLambda 注解应用于 inline 或 crossinline lambda。这些 lambda 不可序列化,因此应用 @JvmSerializableLambda 没有效果。弃用周期:- 2.1.20:把 @JvmSerializableLambda 应用于 inline 和 crossinline lambda 时报告警告 - 2.3.0:把该警告提升为错误;该变更可以在渐进模式下启用

当泛型签名不匹配时禁止把 Kotlin 接口委托给 Java 类

Issue:KTLC-267 组件:核心语言 不兼容变更类型:源码级 简要说明:Kotlin 2.3.0 禁止委托给那些以非泛型覆盖实现泛型接口方法的 Java 类。此前允许这种做法会在运行时导致类型不匹配和 ClassCastException。这一变更把错误从运行时提前到编译期。弃用周期:- 2.1.20:报告警告 - 2.3.0:把该警告提升为错误

弃用在表达式体函数中使用 return(未显式指定返回类型时)

Issue:KTLC-288 组件:核心语言 不兼容变更类型:源码级 简要说明:Kotlin 现在弃用在未显式声明函数返回类型时在表达式体中使用 return。弃用周期:- 2.3.0:报告警告 - 2.4.0:把该警告提升为错误

禁止继承通过类型别名引入的可为空父类型

Issue:KTLC-279 组件:核心语言 不兼容变更类型:源码级 简要说明:Kotlin 现在尝试继承可为空的类型别名时会报错,这与它对直接的可为空父类型既有的处理方式一致。弃用周期:- 2.2.0:报告警告 - 2.3.0:把该警告提升为错误

统一顶层 lambda 与调用实参的泛型签名生成

Issue:KTLC-277 组件:反射 不兼容变更类型:行为级 简要说明:Kotlin 2.3.0 对顶层 lambda 使用与作为调用实参传入的 lambda 相同的类型检查逻辑,确保两种情况下生成的泛型签名一致。弃用周期:- 2.3.0:引入新行为;在渐进模式下不适用

禁止把 reified 类型参数推断为交叉类型

Issue:KTLC-13 组件:核心语言 不兼容变更类型:源码级 简要说明:Kotlin 2.3.0 禁止把 reified 类型参数推断为交叉类型的情况,因为这可能导致不正确的运行时行为。弃用周期:- 2.1.0:把 reified 类型参数推断为交叉类型时报告警告 - 2.3.0:把该警告提升为错误

禁止通过类型参数边界暴露可见性更低的类型

Issue:KTLC-275 组件:核心语言 不兼容变更类型:源码级 简要说明:Kotlin 2.3.0 禁止使用会暴露可见性比函数或声明本身更严格的类型的类型参数边界,使函数的规则与已应用于类的规则保持一致。弃用周期:- 2.1.0:对有问题的类型参数边界报告警告 - 2.3.0:把该警告提升为错误

标准库

弃用 Char 与数值之间的转换,并引入显式的 digit 和 code API

Issue:KTLC-321 组件:kotlin-stdlib 不兼容变更类型:源码级 简要说明:Kotlin 2.3.0 弃用了数值类型的 Char.toX() 和 X.toChar() 转换,并引入了用于访问字符编码值和数字值的新显式 API。弃用周期:- 1.4.30:以实验性形式引入新函数 - 1.5.0:把新函数提升为稳定;对旧函数报告警告并给出替代建议 - 2.3.0:把这些警告提升为错误

弃用 Number.toChar() 函数

Issue:KT-56822 组件:kotlin-stdlib 不兼容变更类型:源码级 简要说明:Number.toChar() 函数已被弃用。请改用 toInt().toChar() 或 Char 构造器。弃用周期:- 1.9.0:使用 Number.toChar() 函数时报告警告 - 2.3.0:把该警告提升为错误

弃用 String.subSequence(start, end) 函数

Issue:KTLC-282 组件:kotlin-stdlib 不兼容变更类型:源码级 简要说明:String.subSequence(start, end) 函数已被弃用。请改用 String.subSequence(startIndex, endIndex) 函数。弃用周期:- 1.0:使用 String.subSequence(start, end) 时报告警告 - 2.3.0:把该警告提升为错误

弃用 kotlin.io.createTempDirectory() 和 kotlin.io.createTempFile() 函数

Issue:KTLC-281 组件:kotlin-stdlib 不兼容变更类型:源码级 简要说明:kotlin.io.createTempDirectory() 和 kotlin.io.createTempFile() 函数已被弃用。请改用 kotlin.io.path.createTempDirectory() 和 kotlin.io.path.createTempFile() 函数。弃用周期:- 1.4.20:使用 kotlin.io.createTempDirectory() 和 kotlin.io.createTempFile() 函数时报告警告 - 2.3.0:把该警告提升为错误

隐藏 InputStream.readBytes(Int) 函数

Issue:KTLC-280 组件:kotlin-stdlib 不兼容变更类型:源码级 简要说明:在长期弃用之后,InputStream.readBytes(estimatedSize: Int = DEFAULT_BUFFER_SIZE): ByteArray 函数现在已被隐藏。弃用周期:- 1.3.0:报告警告 - 1.5.0:把该警告提升为错误 - 2.3.0:隐藏该函数

统一 Kotlin/Native 与其他平台的堆栈跟踪打印

Issue:KT-81431 组件:Kotlin/Native 不兼容变更类型:行为级 简要说明:在格式化异常堆栈跟踪时,如果同一个异常原因已经被打印过,就不会再打印额外的原因。弃用周期:- 2.3.20:把 Kotlin/Native 的异常堆栈跟踪格式与其他 Kotlin 平台统一

修正 Iterable<T>.intersect() 和 Iterable<T>.subtract() 的行为

Issue:KTLC-268 组件:kotlin-stdlib 不兼容变更类型:行为级 简要说明:Iterable<T>.intersect() 和 Iterable<T>.subtract() 函数现在会在把每个接收者元素加入结果集之前先测试其隶属关系。结果集使用 Any::equals 比较元素,因此即使参数集合使用引用相等(例如 IdentityHashMap.keys)也能得到正确结果。弃用周期:- 2.3.0:启用新行为

工具

同时使用 kotlin-dsl 和 kotlin("jvm") 插件时收到不受支持的 KGP 版本警告

Issue:KT-79851 组件:Gradle 不兼容变更类型:行为级 简要说明:在 Kotlin 2.3 中,如果你的 Gradle 项目同时使用 kotlin-dsl 和 kotlin("jvm") 插件,可能会看到关于不受支持的 Kotlin Gradle 插件(KGP)版本的 Gradle 警告。迁移步骤:一般来说,我们不建议在同一个 Gradle 项目中同时使用 kotlin-dsl 和 kotlin("jvm") 插件。这种组合不受支持。对于约定插件、预编译脚本插件或任何其他未发布的构建逻辑,你有三种选择:1. 不要显式应用 kotlin("jvm") 插件,而是让 kotlin-dsl 插件自动提供兼容的 KGP 版本。2. 如果你想显式应用 kotlin("jvm") 插件,请使用 embeddedKotlinVersion 常量指定内嵌的 Kotlin 版本。要升级内嵌的 Kotlin 和语言版本,请更新 Gradle 版本。你可以在 Gradle 的 Kotlin 兼容性说明中找到兼容的 Gradle 版本。3. 不要使用 kotlin-dsl 插件。对于不与特定 Gradle 版本绑定的二进制插件,这可能更合适。作为最后的手段,你可以把项目配置为使用语言版本 2.1 或更高版本,这会覆盖 kotlin-dsl 插件的冲突行为。不过,我们强烈建议不要这样做。如果你在迁移过程中遇到困难,请在我们的 Slack 的 #gradle 频道寻求支持。弃用周期:- 2.3.0:引入一项诊断,用于检测 kotlin-dsl 插件与不兼容的编译器语言或 API 版本一起使用的情况

弃用 AGP 9.0.0 及更高版本下的 kotlin-android 插件

Issue:KT-81199 组件:Gradle 不兼容变更类型:源码级 简要说明:在 Kotlin 2.3.0 中,当使用 Android Gradle 插件(AGP)9.0.0 或更高版本时,org.jetbrains.kotlin.android 插件已被弃用。从 AGP 9.0.0 开始,AGP 内置了对 Kotlin 的支持,因此不再需要 kotlin-android 插件。弃用周期:- 2.3.0:当 kotlin-android 插件与 AGP 9.0.0 或更高版本一起使用,并且 android.builtInKotlin 和 android.newDsl=false 两个 Gradle 属性都设置为 false 时报告警告

弃用 testApi 配置

Issue:KT-63285 组件:Gradle 不兼容变更类型:源码级 简要说明:Kotlin 2.3.0 弃用了 testApi 配置。该配置会把测试依赖和源码暴露给其他模块,而 Gradle 不支持这种行为。迁移选项:把任何 testApi() 用法替换为 testImplementation(),其他变体同理。例如,把 kotlin.sourceSets.commonTest.dependencies.api() 替换为 kotlin.sourceSets.commonTest.dependencies.implementation()。对于 Kotlin/JVM 项目,请考虑改用 Gradle 的 test fixtures。如果你希望在多平台项目中支持 test fixtures,请在 YouTrack 中分享你的用例。弃用周期:- 2.3.0:报告警告

弃用 createTestExecutionSpec() 函数

Issue:KT-75449 组件:Gradle 不兼容变更类型:源码级 简要说明:Kotlin 2.3.0 弃用了 KotlinJsTestFramework 接口中的 createTestExecutionSpec() 函数,因为它已不再使用。弃用周期:- 2.2.20:报告警告 - 2.3.0:把该警告提升为错误 - 2.4.0:移除该函数

移除 closureTo()、createResultSet() 和 KotlinToolingVersionOrNull() 函数

Issue:KT-64273 组件:Gradle 不兼容变更类型:源码级 简要说明:Kotlin 2.3.0 从 closure DSL 中移除了 closureTo()、createResultSet() 函数,因为它们已不再使用。此外,KotlinToolingVersionOrNull() 函数也被移除。请改用 KotlinToolingVersion() 函数。弃用周期:- 1.7.20:报告错误 - 2.3.0:移除这些函数

弃用 ExtrasProperty API

Issue:KT-74915 组件:Gradle 不兼容变更类型:源码级 简要说明:自 Kotlin 2.0.0 起已被弃用的 ExtrasProperty API 在 Kotlin 2.3.0 中变为 internal。请改用 Gradle 的 ExtraPropertiesExtension API。弃用周期:- 2.0.0:报告警告 - 2.1.0:把该警告提升为错误 - 2.3.0:把该 API 改为 internal

弃用 KotlinCompilation 中的 HasKotlinDependencies

Issue:KT-67290 组件:Gradle 不兼容变更类型:源码级 简要说明:Kotlin 2.3.0 弃用了 KotlinCompilation 中的 HasKotlinDependencies 接口。与依赖相关的 API 现在通过 KotlinSourceSet 接口暴露。弃用周期:- 2.3.0:报告警告

弃用 npm 和 Yarn 包管理器的内部函数与属性

Issue:KT-81009 组件:Gradle 不兼容变更类型:源码级 简要说明:以下与 npm 和 Yarn 包管理器相关的函数和属性已被弃用:* CompositeDependency.dependencyName、CompositeDependency.dependencyVersion、CompositeDependency.includedBuildDir。* KotlinNpmInstallTask.Companion.NAME。* LockCopyTask.Companion.STORE_PACKAGE_LOCK_NAME、LockCopyTask.Companion.RESTORE_PACKAGE_LOCK_NAME、LockCopyTask.Companion.UPGRADE_PACKAGE_LOCK。* Npm.npmExec()。* NpmProject.require()、NpmProject.useTool()。* PublicPackageJsonTask.jsIrCompilation。* YarnBasics.yarnExec()。* YarnPlugin.Companion.STORE_YARN_LOCK_NAME、YarnPlugin.Companion.RESTORE_YARN_LOCK_NAME、YarnPlugin.Companion.UPGRADE_YARN_LOCK。* YarnSetupTask.Companion.NAME。弃用周期:- 2.2.0 和 2.2.20:使用这些函数或属性时报告警告 - 2.3.0:把这些警告提升为错误 - 2.4.0:移除这些函数和属性

弃用对 PhantomJS 的支持

Issue:KT-76019 组件:Gradle 不兼容变更类型:源码级 简要说明:由于 PhantomJS 已不再维护,Kotlin 2.3.0 弃用了 NpmVersions API 中的 karmaPhantomjsLauncher 属性。弃用周期:- 2.3.0:报告警告

禁止子类化用于设置测试运行或 JavaScript 运行时的类

Issue:KT-75869、KT-81007 组件:Gradle 不兼容变更类型:源码级 简要说明:Kotlin 2.3.0 禁止对以下类进行子类化:* KotlinTest * KotlinNativeTest * KotlinJsTest * KotlinJsIrTarget * KotlinNodeJsIr * KotlinD8Ir * KotlinKarma * KotlinMocha * KotlinWebpack * TypeScriptValidationTask * YarnRootExtension。这些类从来就不是设计给子类化的。所有子类化的用例现在都应由 Kotlin Gradle 插件 DSL 提供的配置块覆盖。如果这些任务的现有 API 不能满足你设置测试运行或 JavaScript 运行时的需求,请在 YouTrack 中分享反馈。弃用周期:- 2.2.0:对这些类的子类化代码报告警告 - 2.3.0:把这些警告提升为错误 - 2.4.0:移除这些 API

弃用 ExperimentalWasmDsl 注解类

Issue:KT-81005 组件:Gradle 不兼容变更类型:源码级 简要说明:ExperimentalWasmDsl 注解类已被弃用,因为相关功能已移到 kotlin-plugin-annotations 模块中。弃用周期:- 2.0.20:报告警告 - 2.3.0:把该警告提升为错误 - 2.4.0:移除该注解类

弃用 ExperimentalDceDsl 注解类

Issue:KT-81008 组件:Gradle 不兼容变更类型:源码级 简要说明:ExperimentalDceDsl 注解类已不再使用,因此已被弃用。弃用周期:- 2.2.0:报告警告 - 2.3.0:把该警告提升为错误 - 2.4.0:移除该注解类

弃用 JavaScript 工具函数

Issue:KT-81010 组件:Gradle 不兼容变更类型:源码级 简要说明:以下函数和属性只在内部使用,因此已被弃用:* JsIrBinary.generateTs * KotlinJsIrLink.mode * NodeJsSetupTask.Companion.NAME * Appendable.appendConfigsFromDir() * ByteArray.toHex() * FileHasher.calculateDirHash() * String.jsQuoted() 弃用周期:- 2.2.0:使用 KotlinJsIrLink.mode 属性时报告警告 - 2.2.0:使用 NodeJsSetupTask.Companion.NAME 属性和函数时报告警告 - 2.2.20:使用 JsIrBinary.generateTs 属性时报告警告 - 2.3.0:把这些警告提升为错误 - 2.4.0:移除这些 API

弃用已迁移的 D8 和 Binaryen 属性

Issue:KT-81006 组件:Gradle 不兼容变更类型:源码级 简要说明:以下属性已被弃用,因为它们已从 org.jetbrains.kotlin.gradle.targets.js 包迁移到 org.jetbrains.kotlin.gradle.targets.wasm 包:* binaryen.BinaryenEnvSpec * binaryen.BinaryenExtension * binaryen.BinaryenPlugin * binaryen.BinaryenRootPlugin * BinaryenSetupTask.Companion.NAME * d8.D8EnvSpec * d8.D8Plugin * D8SetupTask.Companion.NAME 弃用周期:- 2.2.0:报告警告 - 2.3.0:把该警告提升为错误 - 2.4.0:移除这些属性

弃用 NodeJsExec DSL 中的 create() 函数

Issue:KT-81004 组件:Gradle 不兼容变更类型:源码级 简要说明:NodeJsExec DSL 伴生对象中的 create() 函数已被弃用。请改用 register() 函数。弃用周期:- 2.1.20:报告警告 - 2.3.0:把该警告提升为错误 - 2.4.0:移除该函数

弃用 kotlinOptions DSL 中的属性

Issue:KT-76720 组件:Gradle 不兼容变更类型:源码级 简要说明:自 Kotlin 2.2.0 起,通过 kotlinOptions DSL 及相关 KotlinCompile<KotlinOptions> 任务接口配置编译器选项的能力已被弃用,改用新的 compilerOptions DSL。Kotlin 2.3.0 延续了 kotlinOptions 接口中所有属性的弃用周期。要迁移,请使用 compilerOptions DSL 配置编译器选项。迁移指南请参阅从 kotlinOptions {} 迁移到 compilerOptions {}。弃用周期:- 2.0.0:对 kotlinOptions DSL 报告警告 - 2.2.0:把该警告提升为错误,并弃用 kotlinOptions 中的所有属性 - 2.3.0:把 kotlinOptions 中所有属性的警告提升为错误

弃用 kotlinArtifacts API

Issue:KT-77066 组件:Gradle 不兼容变更类型:源码级 简要说明:实验性的 kotlinArtifacts API 已被弃用。请使用 Kotlin Gradle 插件中现有的 DSL 来构建最终的本地二进制文件。如果这不足以完成迁移,请在这个 YouTrack issue 中留言。弃用周期:- 2.2.0:使用 kotlinArtifacts API 时报告警告 - 2.3.0:把该警告提升为错误 - 2.4.0:移除该 API

移除 kotlin.mpp.resourcesResolutionStrategy Gradle 属性

Issue:KT-74955 组件:Gradle 不兼容变更类型:源码级 简要说明:此前 kotlin.mpp.resourcesResolutionStrategy Gradle 属性因未被使用而被弃用。在 Kotlin 2.3.0 中,该 Gradle 属性被完全移除。弃用周期:- 2.2.0:报告配置期诊断 - 2.3.0:移除该 Gradle 属性

弃用多平台 IDE 导入的旧模式

Issue:KT-61127 组件:Gradle 不兼容变更类型:源码级 简要说明:在 Kotlin 2.3.0 之前,我们支持多种多平台 IDE 导入模式。现在旧模式已被弃用,只保留一种模式。此前,旧模式通过 kotlin.mpp.import.enableKgpDependencyResolution=false Gradle 属性启用。现在使用该属性会触发弃用警告。弃用周期:- 2.3.0:使用 kotlin.mpp.import.enableKgpDependencyResolution=false Gradle 属性时报告警告

移除用于禁用精确编译备份的属性

Issue:KT-81038 组件:Gradle 不兼容变更类型:源码级 简要说明:Kotlin 1.9.0 引入了一项名为“精确编译备份”的增量编译实验性优化。经过成功测试后,该优化在 Kotlin 2.0.0 中默认启用。Kotlin 2.3.0 移除了用于关闭该优化的 kotlin.compiler.preciseCompilationResultsBackup 和 kotlin.compiler.keepIncrementalCompilationCachesInMemory Gradle 属性。弃用周期:- 2.1.20:报告警告 - 2.3.0:移除这些属性

弃用 CInteropProcess 中的 destinationDir

Issue:KT-74910 组件:Gradle 不兼容变更类型:源码级 简要说明:CInteropProcess 任务中的 destinationDir 属性已被弃用。请改用 CInteropProcess.destinationDirectory.set() 函数。弃用周期:- 2.1.0:使用 destinationDir 属性时报告警告 - 2.2.0:把该警告提升为错误 - 2.3.0:隐藏 destinationDir 属性

弃用 CInteropProcess 中的 konanVersion

Issue:KT-74911 组件:Gradle 不兼容变更类型:源码级 简要说明:CInteropProcess 任务中的 konanVersion 属性已被弃用。请改用 CInteropProcess.kotlinNativeVersion。弃用周期:- 2.1.0:使用 konanVersion 属性时报告警告 - 2.2.0:把该警告提升为错误 - 2.3.0:隐藏 konanVersion 属性

移除 KotlinCompile.classpathSnapshotProperties 属性

Issue:KT-76177 组件:Gradle 不兼容变更类型:源码级 简要说明:kotlin.incremental.useClasspathSnapshot Gradle 属性已在 Kotlin 2.2.0 中移除。在 Kotlin 2.3.0 中,以下属性也被移除:* KotlinCompile.classpathSnapshotProperties.useClasspathSnapshot * KotlinCompile.classpathSnapshotProperties.classpath 弃用周期:- 2.0.20:以警告形式弃用 kotlin.incremental.useClasspathSnapshot 属性 - 2.2.0:移除 kotlin.incremental.useClasspathSnapshot 属性 - 2.3.0:移除 KotlinCompile.classpathSnapshotProperties.useClasspathSnapshot 和 KotlinCompile.classpathSnapshotProperties.classpath 属性

弃用 getPluginArtifactForNative() 函数

Issue:KT-78870 组件:Gradle 不兼容变更类型:源码级 简要说明:在 Kotlin 2.2.20 中,getPluginArtifactForNative() 函数已被弃用。请改用 getPluginArtifact() 函数。弃用周期:- 2.2.20:报告警告 - 2.3.0:把该警告提升为错误 - 2.4.0:移除该函数

修改注册所有生成源的方式

Issue:KT-45161 组件:Gradle 不兼容变更类型:源码级 简要说明:Kotlin 2.3.0 在 KotlinSourceSet 接口中引入了一个新的实验性 API,让你可以在 Gradle 项目中注册生成的源。此前,你可以使用 kotlin 属性访问所有生成的源。从 Kotlin 2.3.0 开始,如果你的插件或构建逻辑需要访问所有生成的源,请改用 allKotlinSources 属性。迁移建议:* 要注册生成的源,请使用 generatedKotlin 属性。* 要访问所有源(包括非生成的源),请使用 allKotlinSources 属性。

弃用 kotlin.publishJvmEnvironmentAttribute 属性

Issue:KT-83678 组件:Gradle 不兼容变更类型:源码级 简要说明:在 Kotlin 2.3.20 中,kotlin.publishJvmEnvironmentAttribute 属性已被弃用。该属性曾允许为多平台库禁用 org.gradle.jvm.environment 属性的发布。从 Kotlin 2.0.20 开始,org.gradle.jvm.environment 默认发布,以确保常规的依赖解析。弃用周期:- 2.3.20:报告警告 - 2.4.0:移除该属性

弃用 CleanableStore 接口和 CleanDataTask 类

Issue:KT-78104 组件:Gradle 不兼容变更类型:源码级 简要说明:CleanableStore 接口和 CleanDataTask 类已被弃用,因为它们已不再使用。弃用周期:- 2.3.20:报告警告 - 2.4.20:把该警告提升为错误

弃用 kotlin.kmp.isolated-projects.support Gradle 属性

Issue:KT-79257 组件:Gradle 不兼容变更类型:源码级 简要说明:由于多平台项目默认与隔离项目兼容,且没有其他选项,kotlin.kmp.isolated-projects.support Gradle 属性已被弃用。弃用周期:- 2.3.20:报告警告

弃用 kotlin.mpp.enableKotlinToolingMetadataArtifact Gradle 属性

Issue:KT-79924 组件:Gradle 不兼容变更类型:源码级 简要说明:由于 kotlin-tooling-metadata.json 产物现在对多平台项目始终生成,kotlin.mpp.enableKotlinToolingMetadataArtifact Gradle 属性已被弃用。弃用周期:- 2.3.20:报告警告 - 2.4.0:移除支持

弃用 LanguageSettings.enableLanguageFeature DSL

Issue:KT-82323、KT-82847 组件:Gradle 不兼容变更类型:源码级 简要说明:LanguageSettings.enableLanguageFeature DSL 暴露了一个仅用于 Kotlin 编译器测试的内部编译器配置。因此该 DSL 已被弃用。弃用周期:- 2.3.20:使用 LanguageSettings.enableLanguageFeature 时报告警告 - 2.4.0:把该警告提升为错误

弃用“进程外”编译器执行策略

Issue:KT-83125 组件:Gradle 不兼容变更类型:源码级 简要说明:“进程外”编译器执行策略不被构建工具 API支持,并且是现有策略中最慢的。在 Kotlin 2.3.20 中,该策略已被弃用,改用“守护进程”和“进程内”编译器执行策略。弃用周期:- 2.3.20:报告警告 - 2.4.0:移除“进程外”编译器执行策略

移除构建工具

移除对 Ant 的支持

Issue:KT-75875 组件:Ant 简要说明:Kotlin 2.3.0 移除了对 Ant 构建工具的支持。请改用 Gradle 或 Maven。弃用周期:- 2.2.0:报告警告 - 2.3.0:移除支持