13.6.1.3 Kotlin 2.3.x 兼容性指南
18 分钟阅读
原文链接: 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或crossinlinelambda。这些 lambda 不可序列化,因此应用@JvmSerializableLambda没有效果。弃用周期:- 2.1.20:把@JvmSerializableLambda应用于inline和crossinlinelambda 时报告警告 - 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 从
closureDSL 中移除了closureTo()、createResultSet()函数,因为它们已不再使用。此外,KotlinToolingVersionOrNull()函数也被移除。请改用KotlinToolingVersion()函数。弃用周期:- 1.7.20:报告错误 - 2.3.0:移除这些函数
弃用 ExtrasProperty API
Issue:KT-74915 组件:Gradle 不兼容变更类型:源码级 简要说明:自 Kotlin 2.0.0 起已被弃用的
ExtrasPropertyAPI 在 Kotlin 2.3.0 中变为 internal。请改用 Gradle 的ExtraPropertiesExtensionAPI。弃用周期:- 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 弃用了
NpmVersionsAPI 中的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 不兼容变更类型:源码级 简要说明:
NodeJsExecDSL 伴生对象中的create()函数已被弃用。请改用register()函数。弃用周期:- 2.1.20:报告警告 - 2.3.0:把该警告提升为错误 - 2.4.0:移除该函数
弃用 kotlinOptions DSL 中的属性
Issue:KT-76720 组件:Gradle 不兼容变更类型:源码级 简要说明:自 Kotlin 2.2.0 起,通过
kotlinOptionsDSL 及相关KotlinCompile<KotlinOptions>任务接口配置编译器选项的能力已被弃用,改用新的compilerOptionsDSL。Kotlin 2.3.0 延续了kotlinOptions接口中所有属性的弃用周期。要迁移,请使用compilerOptionsDSL 配置编译器选项。迁移指南请参阅从kotlinOptions {}迁移到compilerOptions {}。弃用周期:- 2.0.0:对kotlinOptionsDSL 报告警告 - 2.2.0:把该警告提升为错误,并弃用kotlinOptions中的所有属性 - 2.3.0:把kotlinOptions中所有属性的警告提升为错误
弃用 kotlinArtifacts API
Issue:KT-77066 组件:Gradle 不兼容变更类型:源码级 简要说明:实验性的
kotlinArtifactsAPI 已被弃用。请使用 Kotlin Gradle 插件中现有的 DSL 来构建最终的本地二进制文件。如果这不足以完成迁移,请在这个 YouTrack issue 中留言。弃用周期:- 2.2.0:使用kotlinArtifactsAPI 时报告警告 - 2.3.0:把该警告提升为错误 - 2.4.0:移除该 API
移除 kotlin.mpp.resourcesResolutionStrategy Gradle 属性
Issue:KT-74955 组件:Gradle 不兼容变更类型:源码级 简要说明:此前
kotlin.mpp.resourcesResolutionStrategyGradle 属性因未被使用而被弃用。在 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=falseGradle 属性启用。现在使用该属性会触发弃用警告。弃用周期:- 2.3.0:使用kotlin.mpp.import.enableKgpDependencyResolution=falseGradle 属性时报告警告
移除用于禁用精确编译备份的属性
Issue:KT-81038 组件:Gradle 不兼容变更类型:源码级 简要说明:Kotlin 1.9.0 引入了一项名为“精确编译备份”的增量编译实验性优化。经过成功测试后,该优化在 Kotlin 2.0.0 中默认启用。Kotlin 2.3.0 移除了用于关闭该优化的
kotlin.compiler.preciseCompilationResultsBackup和kotlin.compiler.keepIncrementalCompilationCachesInMemoryGradle 属性。弃用周期:- 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.useClasspathSnapshotGradle 属性已在 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.supportGradle 属性已被弃用。弃用周期:- 2.3.20:报告警告
弃用 kotlin.mpp.enableKotlinToolingMetadataArtifact Gradle 属性
Issue:KT-79924 组件:Gradle 不兼容变更类型:源码级 简要说明:由于
kotlin-tooling-metadata.json产物现在对多平台项目始终生成,kotlin.mpp.enableKotlinToolingMetadataArtifactGradle 属性已被弃用。弃用周期:- 2.3.20:报告警告 - 2.4.0:移除支持
弃用 LanguageSettings.enableLanguageFeature DSL
Issue:KT-82323、KT-82847 组件:Gradle 不兼容变更类型:源码级 简要说明:
LanguageSettings.enableLanguageFeatureDSL 暴露了一个仅用于 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:移除支持