web-dev-qa-db-ja.com

Intellijにapplication.ymlのプロパティを認識させる方法

私はgradleを使用してIntellijに私のプロパティを認識させようとしています。私は手順に従いました ここ 。つまり、これは@ConfigurationPropertiesいくつかのプロパティを持つ注釈付きクラス。

それらを処理するために春の依存関係を追加しました:

dependencies {
    optional "org.springframework.boot:spring-boot-configuration-processor"
}

compileJava.dependsOn(processResources)

プラグインを追加しました(プラグインを使用せず、コンパイル依存関係にするだけで、変更はありません)

buildscript {
    repositories {
        maven { url 'http://repo.spring.io/plugins-release' }
    }
    dependencies { classpath 'io.spring.gradle:propdeps-plugin:0.0.9.RELEASE' }
}

apply plugin: 'propdeps'
apply plugin: 'propdeps-maven'
apply plugin: 'propdeps-idea'

ビルドを実行すると、build/classes/Java/main/META-INF/spring-configuration-metadata.jsonファイルは、私のプロパティに基づいて作成されます。どちらかでプロパティを使用しようとすると、application.ymlまたはapplication.properties、Intellijはそれを解決できないと言います。

ドキュメントは、それをadditional-spring-configuration-metadata.jsonそしてそれを処理するためにそれが呼び出されることを期待するかもしれませんが、ビルド名をそのように作成する方法も、そうでないことを期待するようにIntellijを構成する方法もわかりません。

誰かがこれをgradleで動作させていますか?それともバグですか。

Edit私は repo を作成して、これを実証するために2つのプロジェクトを作成しました。 1つはGradle用、もう1つはMaven用です。 start.spring.ioからプロジェクトを作成し、基本的にプロパティ構成を追加しました。また、オプションの/ compileOnlyの代わりに、両方のケースでストレートコンパイル依存関係を使用しました。

私は以前これを確認していませんでしたが、コードアシストはMavenで機能しますが、Gradleでは機能しません。どちらもspring-configuration-metadata.json の中に META-INFは、それぞれのビルドフォルダにあります。誰が拾っていないのか正確にはわかりません。

その他の関連バージョン

Intellij: 2017.3.4
Springboot: 1.5.9
Gradle: 4.4.1
Java: 8.161
8
phospodka
3
Andrei Ivantsov

私の知る限り、IntelliJ(この記事の執筆時点では2018.1.2)はspring-configuration-metadata.jsonファイルをメインソースルート(src/main/resources/META-INF/ or src/main/Java/META-INF/)またはデフォルトの出力ディレクトリで、ソースツリーのプロパティのオートコンプリート用にピックアップします。 phospodkaのコメントを拡張するには、このようなものをbuild.gradleに追加してIntelliJを満たすことができます。

task copyConfigurationMetadata(type: Copy) {
    from(compileJava) {
        include 'META-INF/spring-configuration-metadata.json'
    }
    into "out/production/classes"
}
compileJava {
    dependsOn processResources
    finalizedBy copyConfigurationMetadata
}
1
thyme

この答えは、(現時点では)他の2つの答えを少しひねったものです。私の場合、これは問題を「修正」したものです:(2019.03.01-Ultimate)

  • デフォルトの注釈処理をオンにします([ファイル]> [設定]> [ビルド、実行、配置]> [注釈プロセッサ]> [注釈処理を有効にする])。

    • [プロジェクトのクラスパスからプロセッサを取得]を選択します
    • モジュールの出力ディレクトリに対して生成されたソースを保存するを選択します
    • 他のデフォルトを維持する
    • oKをクリック
  • Build.gradleの@thymeの回答にコードを追加します

    • into "out/production/classes"の代わりにEXCEPT
    • 使用:into "build/generated/sources/annotationProcessor"

これで、gradle clean/buildを実行できるようになり、Intellijが「追加のメタデータ」定義を見つけられるようになります。

Build.gradleコードで 'additional-spring-configuration-metadata.json'が明示的に言及されていない場合でも、annotationProcessorフォルダーに「spring-configuration-metatdata.json」と表示されるのは、まさに「追加メタデータ」であることに注意してください。 "Intellijが見つけた場所。

編集:また、Intellijが新しいエントリを(新しく再生成されたファイルで)表示する前に、新しい「追加のメタデータ」アイテムを追加した後、クリーンアップ/再構築する必要があります。

0
geneSummons