この記事はand factory.inc Advent Calendar 2024 11日目の記事です。
導入
個人開発でKotlinとkotlinx.serializationのバージョン互換性エラーに悩まされ、互換性のあるバージョンに下げても同じエラーで解消しない状況に直面。原因を探して試行錯誤した結果、ようやく解決に至った過程をご共有します。同じエラーに直面している方のお役に立つことができれば幸いです。
原因・解決方法
- 他のライブラリやフレームワークでkotlinx.serializationが使用されていないか確認
- 使用されている場合、kotlinx.serializationのバージョンが合うようにそのライブラリやフレームワークのバージョンを調節する
今回はKtorが原因でした。
経緯
個人開発中に以下のようなエラーが発生しました。
e: Your current Kotlin version is 1.9.25, while kotlinx.serialization core runtime 1.7.3 requires at least Kotlin 2.0.0-RC1. Please update your Kotlin compiler and IDE plugin.
内容(直訳)としては
現在のKotlinのバージョンは1.9.25ですが、kotlinx.serialization core runtime 1.7.3には少なくともKotlin 2.0.0-RC1が必要です。KotlinコンパイラとIDEプラグインを更新してください。
kotlinx.serializationのリリースノートから確認すると1.7.3は通常Kotlin2.0.20を使用するようになっているそう。
私は Kotlinのバージョンを上げる対応が少し面倒だったので このkotlinx.serializationのバージョンを1.7.3 -> 1.6.3と互換性のあるバージョンに下げました。
しかし同様のエラーが発生。バージョンを下げたにも関わらずエラー文では1.7.3が使えないとの文言がでました。
解決方法
どうやら使用するものによっては他の依存関係が利用されていることがあるそう。
なので今回の使用しているものの依存関係を調べるとKtorのバージョン3.0.1でkotlinx.serializationが使われていることがわかりました。
[versions]
kotlin = "2.0.21"
kotlinx-html = "0.11.0"
kotlinx-datetime = "0.6.1"
kotlinx-io = "0.5.4"
coroutines = "1.9.0"
atomicfu = "0.26.0"
serialization = "1.7.3" // 1.7.3が使用されている
binaryCompatibilityValidator = "0.16.3"
dokka = "1.9.20"
kover = "0.8.3"
ktlint = "3.15.0"
#他色々
[libraries]
kotlin-gradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
# ~~~
kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "serialization" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization" }
kotlinx-serialization-json-io = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json-io", version.ref = "serialization" }
kotlinx-serialization-cbor = { module = "org.jetbrains.kotlinx:kotlinx-serialization-cbor", version.ref = "serialization" }
kotlinx-serialization-protobuf = { module = "org.jetbrains.kotlinx:kotlinx-serialization-protobuf", version.ref = "serialization" }
なのでこちらを最新バージョンの3.0.1 -> 2.3.13に下げると無事ビルドも通り想定通りの結果を得られました!
まとめ
今回はKotlinとkotlinx.serializationの互換性エラーについて書かせていただきました。
依存関係についてはまだよくわかっていないのですが、今回の経験からエラー分に出ているライブラリなどを鵜呑みにしてそこばかり調整するのではなく他の依存関係も調査する必要がわかりました。
追記
Kotlinのバージョンを上げてもビルドが通ったのでこの個人開発はKotlinのバージョンをあげようと思います