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.
Intellij: 2017.3.4
Springboot: 1.5.9
Gradle: 4.4.1
Java: 8.161
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
}
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
Ajoutez le code dans la réponse de @ thyme à votre build.gradle
into "out/production/classes"
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é).