Help us understand the problem. What is going on with this article?

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

More than 3 years have 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」 で選択できる) 用ってことなのかな?)

関連

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away