逆引きマニュアル: IntelliJ IDEAでAnnotation Processorsを使用する方法

投稿日: 更新日:

やりたいこと

IntelliJ IDEAで、Annotation Processors(注釈プロセッサ, アノテーションプロセッサ)を使用する方法です。

前提条件

IntelliJ IDEA 2017.3.5で確認しています。

概要

  • Module content rootを設定する。
    • src/main/generatedに生成されたコードが入ります。
    • このファイルはリポジトリ管理外にします。
  • IntelliJ IDEAの設定で、この生成されたコードをソースフォルダとして管理する。

手順

  1. 依存ライブラリを追加
  2. Annotaion Processorsの設定
    • Preferences -> Build, Execution, Deployment -> Compiler -> Annotation Processorsの設定
    • Enable annotation processing: オン
    • Store generated source relative to: Module content root
  3. ソースフォルダの設定
    • Gradleの場合は後述。
      • 右クリック -> Open Module Settings
      • *_mainsrc/main/generatedをSourcesとして追加
      • *_testsrc/test/generated_testをTestsとして追加
  4. Build -> Rebuild Project

3.の作業はGraldeの場合は、build.gradleに以下のように入れてください。

参考: sources generated by annotation processing should be marked as such automatically : IDEA-150042

apply plugin: 'idea'

// dependenciesの後くらい。
idea {
    module {
        sourceDirs += file('src/main/generated')
        generatedSourceDirs += file('src/main/generated')
        testSourceDirs += file('src/test/generated_tests')
    }
}

クラス〜〜が重複していますと出る場合

過去にいろいろいじった場合で、同じファイルが複数の場所に格納されていると思われます。 以下のチェックを行ってください。

  • 不要なJavaファイルがないか
  • 不要なクラスパスがないか

Output path intersects with source root.という警告が出る場合

Modulesの設定で、Exclude Foldersの下にSource Foldersを指定すると起きるようです。 自動生成するものに関してはクリアされても問題ないと思います。

制限事項

現在は annotationProcessor に書いたライブラリは無視されるようです。 これを回避するためには、以下のようにすると良さそうです。

idea {
    dependencies {
        compile '...' // annotationProcessorと同じ内容を書く
    }
}

マニュアル