【SpringBoot】java.lang.NoSuchFieldError: Companionで処理が失敗する状況への対処【OkHttp】

TL;DR

  • 自分の場合、Dependency Management PluginによってOkHttpのバージョンが書き換わったことが原因だった
    • com.squareup.okhttp3:okhttp:4.xが期待される所でcom.squareup.okhttp3:okhttp:3.14.9が利用されていた
  • gradledependenciesに利用したいバージョンのOkHttpを追加することで問題が解決した

本文

以下、問題の詳細やその他の情報について書きます。

Dependency Management Plugin周りの話

Dependency Management Plugin周りの詳細な話は別記事としてQiitaに投稿しています。 qiita.com

なぜこの問題が起きるのか

com.squareup.okhttp3:okhttp:4.x3.xの間には互換性が有りません。
特にKotlinの利用の有無は大きな違いです。
直接的なエラーの原因は、Kotlinによって生成されるであろうフィールドにアクセスしようとして失敗していることです。

Spring側の更新がされていない理由

READMEで言及されている通り、com.squareup.okhttp3:okhttp:3.xは既に更新が終了している状態です。 github.com

にも関わらずSpring側のバージョン指定が更新されていない理由は以下の通りです(issue内のやり取りから要約)。

  • SpringFrameworkcom.squareup.okhttp3:okhttp:3.xに依存している
  • SpringFrameworkKotlinに限ったプロジェクトではないため、Kotlinにも依存するcom.squareup.okhttp3:okhttp:4.xに移行することはできない

github.com