kotlin - 将 Gradle 构建升级到 Kotlin 1.7.0 后为 "Unresolved reference: sourceCompatibility"

标签 kotlin gradle gradle-kotlin-dsl

按照 Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6 的一些回答我有一个包含

的Kotlin Gradle DSL脚本
tasks.compileKotlin {
    sourceCompatibility = JavaVersion.VERSION_11.toString()
    targetCompatibility = JavaVersion.VERSION_11.toString()

    kotlinOptions {
        jvmTarget = "11"
    }
}

但是在升级到 Kotlin 1.7.0 之后我得到了异常

Unresolved reference: sourceCompatibility
Unresolved reference: targetCompatibility

我很清楚他们显然已经删除了这些,因为我发现它列在 https://kotlinlang.org/docs/whatsnew17.html#changes-in-compile-tasks

我的问题是,我应该用什么来代替它?如何保证兼容性?

最佳答案

设置 JVM 目标以及 Kotlin API 和语言版本可以通过配置所有 KotlinCompile 任务来完成。

// build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

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

// configure all Kotlin compilation tasks, 
// using the Gradle configuration avoidance API
tasks.withType<KotlinCompile>().configureEach {

  kotlinOptions {
    jvmTarget = "11"
    apiVersion = "1.6"
    languageVersion = "1.6"
  }

  // you can also add additional compiler args, 
  // like opting in to experimental features
  kotlinOptions.freeCompilerArgs += listOf(
    "-opt-in=kotlin.RequiresOptIn",
  )
}
  • apiVersion 将声明的使用限制在指定版本的捆绑库中
  • languageVersion 表示编译后的代码将兼容指定的 Kotlin 版本

All the compiler options are documented here .还有其他构建工具的附加文档,例如 Maven 和 Ant。

您可以使用新的工具链功能来设置将用于编译项目的 Java 版本。

// build.gradle.kts
kotlin {
  jvmToolchain {
    languageVersion.set(JavaLanguageVersion.of("11"))
  }
}

Read more: Gradle Java toolchains support

关于kotlin - 将 Gradle 构建升级到 Kotlin 1.7.0 后为 "Unresolved reference: sourceCompatibility",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72670084/

相关文章:

android - 在测试类中模拟和监视时获取空指针异常

android - 如何在 Android Studio 中使用最新的 gradle 版本

android - 在 android studio 中使用 volley

gradle - Gradle:如何将一些常规代码转换为Kotlin

android - 如何在 gradle 6.0+ 上将类/枚举添加到设置 gradle 脚本?

gradle - 插件如何提供扩展任务?

kotlin - 为什么数据类不能实现Serializable?

variables - 使用 PropertyChangeSupport 获取变量更改通知(例如可观察、委托(delegate))

android - 如何在 Splashscreen API 中删除我的启动画面图标周围的圆形 mask ?

firebase - 实现 'com.google.firebase:firebase-core:17.0.0'并应用插件后出现错误: 'com.google.gms.google-services'