一、编译配置
1、Android中的配置
使用如下方式开启在Android中的gradle的kotlin编译配置:
该配置在其余平台不可用
android {...compileOptions {sourceCompatibility JavaVersion.VERSION_17targetCompatibility JavaVersion.VERSION_17}kotlinOptions {jvmTarget = '1.8'
// freeCompilerArgs.add("-Xexport-kdoc")setFreeCompilerArgs(["-Xcontext-receivers"])
//setFreeCompilerArgs(["-Xexport-kdoc","-Xcontext-receivers","-opt-in=org.mylibrary.OptInAnnotation"])}//如下方式会报错//tasks.withType(KotlinCompile::class).all {
// kotlinOptions.freeCompilerArgs = listOf("-Xcontext-receivers")
//}...}
以上配置会开启Kotlin/JVM 的上下文接收者原型功能,否则该功能不可用,开启后编码可以使用以下代码:
interface LoggingContext {val log: Logger // This context provides a reference to a logger
}context(LoggingContext)
fun startBusinessOperation() {// You can access the log property since LoggingContext is an implicit receiverlog.info("Operation has started")
}fun test(loggingContext: LoggingContext) {with(loggingContext) {// You need to have LoggingContext in a scope as an implicit receiver// to call startBusinessOperation()startBusinessOperation()}
}
传递参数的发过誓可以直接在里面写setFreeCompilerArgs(["-opt-in=org.mylibrary.OptInAnnotation"])
2、其余平台的配置
除了上述配置还可以使用以下配置,该配置可以在其余平台使用:
android {
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {sourceCompatibility = JavaVersion.VERSION_1_8targetCompatibility = JavaVersion.VERSION_1_8kotlinOptions {jvmTarget = '1.8'apiVersion = '1.1'languageVersion = '1.1'}
}
二、参考链接:
- Kotlin 1.6.20 的新特性
- Kotlin Gradle plugin 中的编译器选项
- IDE highlighting: False positive error “Context receivers should be enabled explicitly”
- compileKotlin block in build.gradle file throws error “Could not find method compileKotlin() for arguments […]”