tl; dr:Java gradleと同じディレクトリにファイルを生成するようにIntelliJを設定できません
immutables 注釈プロセッサを使用する小さなプロジェクトがあります。それはgradleコマンドラインビルドで期待どおりに動作しますが、IntelliJに生成されたファイルを同じディレクトリに出力させることはできません。
完全なプロジェクトは GitLab で入手できます。
Gradle config:
次のgradleプラグインを使用します。
ビルドスクリプトの関連部分( 完全なリストへのリンク ):
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
を起動すると、すべてが期待どおりになります:
DataEncoding.Java
が処理され、生成されたJavaファイルDataEncodingEnabled.Java
が最終的に/build/generated/source/apt/main
期待されるパッケージの下com.tmtron.immutables.data
IntelliJでは、 gradle-apt-plugin docs :
次に、./gradlew clean
を実行して、前のファイルがなくなっていることを確認し、IntelliJでBuild
-Build Project
をクリックします。
アノテーションプロセッサは実行されますが、問題は生成されたJavaファイルが間違った場所で終わることです:
/build/generated/source/apt/main/build/generated/source/apt/main/com.tmtron.immutables.data
太字の部分は冗長です。
IntelliJとgradleが同じディレクトリにファイルを生成するように、私は何を間違っていますか、どのように正しく設定できますか?
ノート:
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
今 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
、クラスを使用する場合はcompile
、Gradle 4.6で導入されたannotationProcessor
が必要です。
特定のコンパイルタスクの処理を有効にするには:
compileJava {
options.annotationProcessorPath = configurations.annotationProcessor
}
無効にするには:
compileTestJava {
options.compilerArgs += '-proc:none'
}
みなさん、私は同じ問題を抱えていて、この問題を解決するきれいな方法を見つけました。注釈処理を必要とする2つのライブラリ(LombokとMapStruct)を使用しています。
また、私のIntelliJは2019.1(古い場合は更新します)およびGradle 5.2.1です。
まず、IntelliJを構成しましょう。
最後のステップは、Gradleで依存関係を正しく構成することです。
これで、コマンドラインとIDEの両方からビルドと実行を実行できます。
乾杯!