web-dev-qa-db-ja.com

IntelliJおよびGradleの注釈プロセッサ

tl; dr:Java gradleと同じディレクトリにファイルを生成するようにIntelliJを設定できません

immutables 注釈プロセッサを使用する小さなプロジェクトがあります。それはgradleコマンドラインビルドで期待どおりに動作しますが、IntelliJに生成されたファイルを同じディレクトリに出力させることはできません。

完全なプロジェクトは GitLab で入手できます。

Gradle config
次のgradleプラグインを使用します。

  • gradle-idea plugin アイデアの構成を処理します
  • gradle-apt-plugin これはapt構成を提供し、注釈処理に関連するコンパイルクラスパスとアイデア構成を処理します(アイデアプラグインも適用される場合)

ビルドスクリプトの関連部分( 完全なリストへのリンク ):

apply plugin: 'Java'
apply plugin: "net.ltgt.apt"
apply plugin: 'idea'

dependencies {
    def immutablesVersion = '2.3.9'
    compileOnly "org.immutables:value:$immutablesVersion:annotations"
    compileOnly "org.immutables:encode:$immutablesVersion"
    apt "org.immutables:value:$immutablesVersion"
}

./gradlew buildを起動すると、すべてが期待どおりになります: enter image description here

  1. ソースファイルDataEncoding.Javaが処理され、生成されたJavaファイルDataEncodingEnabled.Javaが最終的に
  2. /build/generated/source/apt/main期待されるパッケージの下com.tmtron.immutables.data
  3. 生成されたファイルも.classファイルにコンパイルされます

IntelliJでは、 gradle-apt-plugin docsenter image description here

次に、./gradlew cleanを実行して、前のファイルがなくなっていることを確認し、IntelliJでBuild-Build Projectをクリックします。
アノテーションプロセッサは実行されますが、問題は生成されたJavaファイルが間違った場所で終わることです: enter image description here

/build/generated/source/apt/main/build/generated/source/apt/main/com.tmtron.immutables.data
太字の部分は冗長です。

IntelliJとgradleが同じディレクトリにファイルを生成するように、私は何を間違っていますか、どのように正しく設定できますか?

ノート:

  • もちろん、私はすでにIntelliJアノテーション構成の「Production sources dir」を空のままにしようとしましたが、彼は機能しません:それは自動的に「generated」を使用し、間違ったパスになります。
  • IntelliJバージョン2016.3.4
17
TmTron

UPDATE 2.2019
Gradle 5.2以降では簡単に実行できます。 gavenkoa s answer を参照してください

UPDATE 5.2018

私が知っている最も簡単な方法は、 apt-idea plugin を使用することです

build.gradleファイル:

plugins {
    id 'Java'
    id 'net.ltgt.apt-idea' version "0.15"
}

そして、注釈プロセッサをannotationProcessor構成に追加します。

final DAGGER_VER = '2.16'
dependencies {
    implementation "com.google.dagger:dagger:${DAGGER_VER}"
    annotationProcessor"com.google.dagger:dagger-compiler:${DAGGER_VER}"
}

GitHubのテストプロジェクト: ex.dagger
(IntelliJ 2018.1.4、Gradle 4.7を使用)

ORIG ANSWER

IntelliJ 2016.3.4で正常に動作するparent-dirを使用した簡単な回避策があります

  • プロダクションソースディレクトリ:../main
  • テストソースディレクトリ:../test

これで、gradleとIntelliJは同じディレクトリにコードを生成します。

修正済み GitLabプロジェクトV0.0.2

参照: apt-gradle-plugin issue#35

13
TmTron

https://github.com/tbroyer/gradle-apt-plugin 状態:

このプラグインの目標は、組み込み機能に取って代わり、最終的には不要になることでした。これはGradle 5.2およびIntelliJ IDEA 2019.1

そう:

dependencies {
  compile("com.google.dagger:dagger:2.18")
  annotationProcessor("com.google.dagger:dagger-compiler:2.18")

  compileOnly("com.google.auto.factory:auto-factory:1.0-beta6")
  annotationProcessor("com.google.auto.factory:auto-factory:1.0-beta6")

  compileOnly("org.immutables:value-annotations:2.7.1")
  annotationProcessor("org.immutables:value:2.7.1")
}

注釈を使用する場合はcompileOnly、クラスを使用する場合はcompileGradle 4.6で導入されたannotationProcessorが必要です。

特定のコンパイルタスクの処理を有効にするには:

compileJava {
    options.annotationProcessorPath = configurations.annotationProcessor
}

無効にするには:

  compileTestJava {
      options.compilerArgs += '-proc:none'
  }
8
gavenkoa

みなさん、私は同じ問題を抱えていて、この問題を解決するきれいな方法を見つけました。注釈処理を必要とする2つのライブラリ(LombokとMapStruct)を使用しています。

また、私のIntelliJは2019.1(古い場合は更新します)およびGradle 5.2.1です。

まず、IntelliJを構成しましょう。

  1. すべてをGradleに委任するため、設定でAnnotaion Processingを無効にします:

enter image description here

  1. Delegeate IDE Gradleへのアクション:

enter image description here

最後のステップは、Gradleで依存関係を正しく構成することです。

  1. Gradleの依存関係セクション:

enter image description here

これで、コマンドラインとIDEの両方からビルドと実行を実行できます。

乾杯!

7
de.la.ru

2019.2.x

  • Intellijの注釈プロセッサを無効にします

disableAnnotationProcessor

  • gradle build.gradleファイルにビルドディレクトリを追加します

build.gradle

  • 次に、gradleタスクを実行してビルドファイルクラスを生成します。例gradle compileJava

runGradleTask

  • ファイル->プロジェクト構造->モジュール->メインフォルダー||除外を削除し、ソースとして追加

projectStructure

そして、プロジェクトはすべての注釈と生成されたソースファイルを見つける必要があります。それが役に立てば幸い。

0
Shakil