web-dev-qa-db-fra.com

Comment faire pour qu'Intellij reconnaisse les propriétés dans application.yml

J'essaie de faire reconnaître à Intellij mes propriétés en utilisant gradle. J'ai suivi les étapes ici . Cela signifie donc que j'ai un @ConfigurationProperties classe annotée avec quelques propriétés.

J'ai ajouté la dépendance Spring pour les traiter:

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

compileJava.dependsOn(processResources)

J'ai ajouté le plugin (j'ai essayé de ne pas utiliser le plugin et d'en faire une dépendance de compilation, pas de changement)

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'

Lorsque j'exécute la génération, je vois un build/classes/Java/main/META-INF/spring-configuration-metadata.json le fichier est créé en fonction de mes propriétés. Lorsque j'essaie d'utiliser la propriété dans _ application.yml ou application.properties, Intellij dit qu'il ne peut pas le résoudre.

La documentation dit qu'elle devrait s'appeler additional-spring-configuration-metadata.json et peut s'attendre à ce qu'il soit appelé ainsi pour le traiter, mais je ne vois pas de moyen de faire le nom de la construction de cette façon ni de configurer Intellij pour qu'il s'attende autrement.

Quelqu'un at-il travaillé avec Gradle? Ou est-ce un bug.

Edit J'ai créé un repo avec une paire de projets pour le démontrer. Un pour gradle et un pour maven. J'ai créé les projets à partir de start.spring.io et j'ai simplement ajouté la configuration des propriétés. J'ai également utilisé une dépendance de compilation directe dans les deux cas au lieu de facultatif/compileOnly.

Je ne l'avais pas confirmé auparavant, mais l'aide au code fonctionne pour maven, mais pas pour gradle. Les deux créent un spring-configuration-metadata.json dans le META-INF dans leurs dossiers de construction respectifs. Je ne sais pas exactement qui ne le ramasse pas.

Diverses versions pertinentes

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

Pour autant que je sache, IntelliJ (au moment d'écrire ces lignes, 2018.1.2) veut que le spring-configuration-metadata.json le fichier doit se trouver dans une racine source principale (src/main/resources/META-INF/ or src/main/Java/META-INF/) ou dans son répertoire de sortie par défaut pour qu'il le récupère pour la saisie semi-automatique des propriétés dans votre arborescence source. Pour développer le commentaire de phospodka, vous pouvez ajouter quelque chose comme ça à votre build.gradle pour satisfaire 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

Cette réponse est une combinaison des deux autres réponses (pour le moment) avec une touche mineure. Dans mon cas, c'est ce qui a "résolu" le problème: (en 2019.03.01-Ultimate)

  • Activez le traitement d'annotation par défaut (Fichier> Paramètres> Générer, exécution, déploiement> Processeurs d'annotation> Activer le traitement d'annotation

    • Sélectionnez Obtain processors from project classpath
    • Sélectionnez Stocker les sources générées par rapport au répertoire de sortie du module
    • conserver les autres valeurs par défaut
    • cliquez sur OK
  • Ajoutez le code dans la réponse de @ thyme à votre build.gradle

    • SAUF au lieu de into "out/production/classes"
    • utilisation: into "build/generated/sources/annotationProcessor"

Vous devriez maintenant pouvoir exécuter gradle clean/build et Intellij devrait être en mesure de trouver vos définitions de "métadonnées supplémentaires".

Notez que même si le code build.gradle ne mentionne pas explicitement 'additional-spring-configuration-metadata.json', c'est exactement ces "métadonnées supplémentaires" qui finissent dans le dossier annotationProcessor en tant que "spring-configuration-metatdata.json "où Intellij le trouve.

EDIT: Notez également que vous devez nettoyer/reconstruire après avoir ajouté de nouveaux éléments de "métadonnées supplémentaires" avant qu'Intellij ne voit les nouvelles entrées (dans le fichier fraîchement régénéré).

0
geneSummons