web-dev-qa-db-ja.com

AutoValueとIntelliJでシンボルを解決できません

私は、IntelliJの注釈処理がGradleのビルドプロセスと共存できるように、正しい設定を見つけようとしています。

IntelliJからビルドするときはいつでも、 gradle-apt-plugin から生成されたソースを認識させることができません。

私のプロジェクトの要件は次のとおりです。

  • IntelliJとGradleの間の構築はシームレスであり、相互のプロセスに干渉しないようにする必要があります
  • IntelliJのソースセットごとに個別のモジュールを作成するオプションを使用する必要があります
  • IntelliJのフォルダベースの構造を使用する必要があります
  • IntelliJは、AutoValueクラスを認識してオートコンプリートできる必要があります

IntelliJ2017.2.4およびGradle3.5で問題を再現するためのMCVEの手順は次のとおりです。

  • IntelliJから新しいGradleプロジェクトを作成します
  • ソースセットごとに個別のモジュールを作成するオプションをチェックします
  • build.gradleファイルを開きます:
  • 次の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();
}
  • IntelliJで実行ビルド→プロジェクトのビルド
  • 静的ファクトリメソッドでGeneratedSourcesTestクラスを開きます。すべて正常にコンパイルされますが、エラーが発生します。

cannot resolve symbol ‘AutoValue_GeneratedSourcesTest’

どうすればAutoValue_GeneratedSourcesTest IntelliJからアクセス可能なクラス?

9
Jaiye

IDEAの下でGradleプロジェクトをインポートした後、次の手順を実行します。

  1. 注釈処理構成を次のように設定します。 enter image description here

  2. 実行メニュー:ビルド-プロジェクトのビルド

  3. 新しい生成されたフォルダーを右クリックし、次を選択します。ディレクトリを-生成されたソースルートとしてマークし、次のようにマークします。- enter image description here

    1. 追加 /generatedプロジェクトの。gitignoreファイルへ

これは、生成されたクラスの完全なIDEサポートを提供する実行可能な最小限の構成です。欠点は、Gradleプロジェクトが生成されたフォルダーに再インポートされるたびに発生することです。 Generated Sources Rootとして再度マークする必要があります。おそらく、build.gradleの下にこれらのパスをソースセットとして追加することで、これを改善できます。 。

上記の結果、IDEAモジュールがコンパイラ出力パス設定を失うことがあります。デフォルトのフォルダに戻すだけで十分です。 。

8
topr

答えは(あるべきです)README for the gradle-apt-plugin: https://github.com/tbroyer/gradle-apt-plugin

つまり、net.ltgt.apt-ideaプラグインも適用します。

ところで、IntelliJのGradleにビルド/実行アクションを委任することをお勧めします。確かに少し遅いですが、IDEでセットアップをゼロにする必要があり、確実に機能します。それでも、そうでない場合でも問題なく機能するはずです。

3
Thomas Broyer

これらを使用して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"
}
0
Amit Kumar