🐞
AndroidStudioをLadybugに上げると、コンパイルエラーになる
事象
AndroidStudioをLadybugに上げると、Koalaではビルドできていたものが、エラーになるようになった。
Execution failed for task ':hoge-module:compileKotlin'.
> Inconsistent JVM-target compatibility detected for tasks 'compileJava' (17) and 'compileKotlin' (21).
メッセージとしてはJVM-targetに一貫性が無いと言われているが、Koalaでは通っていて何も変更はしていない。
また、compileOptionsとKotlinOptionsは、共通化した下記を各build.gradleに適用していたので、なぜエラーが出るのか謎だった。
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
原因と解決
エラーになっているモジュールを見ると、全てjava-library
だった。
共通化したものはandroid-library
向けのもので、java-library
には適用していなかった。
そして、javaのcompatibilityの記載はあったが、kotlinOptionsの記載がなかった。
Koalaまでは、それでもビルドが通るので、デフォルトのjvmTargetが21に変わったのかもしれない。
記載していなかったモジュールのgradleファイルに、下記を記載すればビルドが通る。
tasks.compileKotlin {
kotlinOptions {
jvmTarget = "17"
}
}
が、記載するとkotlinOptions
がdeprecatedになっている。
調べてみると、下記の記事が出てくる。
この記事の通りにすればdeprecatedもなくなった。
ktsの場合
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
tasks.withType<KotlinJvmCompile>().configureEach {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}
groovyの場合
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
tasks.withType(KotlinJvmCompile).configureEach {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}
めでたしめでたし。
Discussion