Posted at

IntelliJ IDEA 2016.3 で Dagger 2 を使うとビルドに失敗する問題と回避策

More than 1 year has passed since last update.

表題通り、IntelliJ IDEA 2016.3 で Dagger 2 を使っているとビルド時に次のようなエラーが発生する。


java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.impl.CompilerOptions.versionToJdkLevel(Ljava/lang/Object;)J


手元では Dagger 2.8 と 2.6 で確認した。


YouTrack のチケット

既に YouTrack にはチケットが登録されていて、解決済みになっている。


原因

チケットの情報を見る感じ、以下のような感じっぽい。


  • Eclipse Java Compiler 4.6.1 の JAR を IntelliJ IDEA が持っている。 コンパイル時にはそれがクラスパスに追加される。

  • Dagger も Eclipse Java Compiler に依存している。 4.6.1 より古いバージョンが必要っぽい。

  • ビルド時に実際にクラスパスに追加されているのは 4.6.1 なので、Dagger が使おうとするメソッドがなくてビルドエラーになる。


解決策


Workaround

とりあえずの回避策としては、IntelliJ IDEA 2016.3 のディレクトリの中の lib/ecj-4.6.1.jar を削除しちゃうこと。


根本的な修正

Java コンパイラとして 「Eclipse」 が選択されているときのみ Eclipse Java Compiler の JAR ファイルをクラスパスに追加するよう変更されるらしい。 バージョン 2016.3.1 に含まれる予定とのこと。

(Eclipse Java Compiler の JAR がクラスパスに追加されるのは、IntelliJ IDEA の Java コンパイラとして 「Eclipse」 を選択したとき (設定の 「Build, Execution, Deployment」 → 「Compiler」 → 「Java Compiler」 で選択できる) 用ってことなのかな?)


関連