私は、IntelliJの注釈処理がGradleのビルドプロセスと共存できるように、正しい設定を見つけようとしています。
IntelliJからビルドするときはいつでも、 gradle-apt-plugin から生成されたソースを認識させることができません。
私のプロジェクトの要件は次のとおりです。
IntelliJ2017.2.4およびGradle3.5で問題を再現するためのMCVEの手順は次のとおりです。
plugins
ブロックを追加します。plugins {
id 'Java'
id 'net.ltgt.apt' version '0.12'
}
dependencies
ブロックを追加しますdependencies {
compileOnly 'com.google.auto.value:auto-value:1.5'
apt 'com.google.auto.value:auto-value:1.5'
}
@AutoValue
public abstract class GeneratedSourcesTest {
static GeneratedSourcesTest create(String field) {
return new AutoValue_GeneratedSourcesTest(field);
}
public abstract String field();
}
GeneratedSourcesTest
クラスを開きます。すべて正常にコンパイルされますが、エラーが発生します。cannot resolve symbol ‘AutoValue_GeneratedSourcesTest’
どうすればAutoValue_GeneratedSourcesTest
IntelliJからアクセス可能なクラス?
IDEAの下でGradleプロジェクトをインポートした後、次の手順を実行します。
実行メニュー:ビルド-プロジェクトのビルド
新しい生成されたフォルダーを右クリックし、次を選択します。ディレクトリを-生成されたソースルートとしてマークし、次のようにマークします。- (
/generated
プロジェクトの。gitignoreファイルへこれは、生成されたクラスの完全なIDEサポートを提供する実行可能な最小限の構成です。欠点は、Gradleプロジェクトが生成されたフォルダーに再インポートされるたびに発生することです。 Generated Sources Rootとして再度マークする必要があります。おそらく、build.gradleの下にこれらのパスをソースセットとして追加することで、これを改善できます。 。
上記の結果、IDEAモジュールがコンパイラ出力パス設定を失うことがあります。デフォルトのフォルダに戻すだけで十分です。 。
答えは(あるべきです)README for the gradle-apt-plugin: https://github.com/tbroyer/gradle-apt-plugin
つまり、net.ltgt.apt-idea
プラグインも適用します。
ところで、IntelliJのGradleにビルド/実行アクションを委任することをお勧めします。確かに少し遅いですが、IDEでセットアップをゼロにする必要があり、確実に機能します。それでも、そうでない場合でも問題なく機能するはずです。
これらを使用してbuild.gradleを作成するだけで、intellijやソースセットなどに触れる必要がなく、正常に動作します。
plugins {
id 'Java'
id "net.ltgt.apt" version "0.20"
}
apply plugin: 'idea'
apply plugin: 'net.ltgt.apt-idea'
group 'abc'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile "com.google.auto.value:auto-value-annotations:1.6.2"
annotationProcessor "com.google.auto.value:auto-value:1.6.2"
}