Konfigurationseigenschaft kann nicht aufgelöst werden '...
Ich habe kein Problem damit, über die Annotation @Value oder über eine automatisch verdrahtete Umgebung auf meine Eigenschaften zuzugreifen. Aber alle meine selbst definierten Eigenschaften erhalten diese Warnung in IDEA. Was soll ich tun, damit IDEA diese erkennt und mich nicht stört?
Antworten:
Damit IntelliJ IDEA Ihre Spring Boot-Eigenschaften kennt, können Sie Spring Boot-Konfigurationsmetadaten in Ihrem Projekt definieren.
Option 1:
Wenn Sie
@ConfigurationProperties
für Ihre Eigenschaften eine mit Anmerkungen versehene Klasse verwenden können, können Sie den Spring Boot-Konfigurationsanmerkungsprozessor zu Ihrem Klassenpfad hinzufügen, und IntelliJ IDEA generiert die Konfigurationsmetadaten für Sie intarget
oderout
:Maven:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
Gradle:
implementation 'org.springframework.boot:spring-boot-configuration-processor'
Option 2:
Erstellen Sie die Konfigurationsmetadatendatei selbst
src/main/resources/META-INF/spring-configuration-metadata.json
:Inhalt:
{ "properties": [ { "name": "myapp.someprop", "type": "java.lang.String" }, { "name": "myapp.someintprop", "type": "java.lang.Integer" } ] }
Optionen 1 und 2:
Klicken Sie im IntelliJ IDEA-Toolfenster Ihres Build-Systems (Maven / Gradle) auf die Schaltfläche "Aktualisieren".
Wählen Sie
Build > Rebuild Project
aus dem Menü.Wenn die Warnung weiterhin angezeigt wird, können Sie versuchen, die IDE neu zu starten. Wählen Sie
File > Invalidate Caches / Restart
und klicken Sie aufInvalidate and Restart
.quelle
@ConfigurationProperties
und den Anmerkungsprozessor) zu verwenden, da Sie dadurch mühsame und fehleranfällige Handschriften von Metadatendateien sparen. Und nach der Ersteinrichtung ist es noch einfacher zu verwenden als@Value
Anmerkungen.Ich hatte das gleiche Problem und zeigte nicht, dass die automatische Vervollständigung nicht mit der IntelliJ Ultimate Edition und nicht mit der Community-Version funktioniert. Verknüpfung
Einige nützliche Schritte wären:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
target/classes/META-INF/spring-configuration-metadata.js
, um Fehler zu vermeiden.@ConfigurationProperties("name-here")
und dass Sie sie von aktiviert haben@EnableConfigurationProperties(NameOfTheConfigClass.class)
quelle
Bitte verwenden Sie Folgendes für das Gradle Kotlin Script for Kotlin-Projekt:
plugins { kotlin("jvm") kotlin("kapt") } /* ... */ dependencies { val configurationProcessor ="org.springframework.boot:spring-boot-configuration-processor:${BuildConstants.springBootVersion}" kapt(configurationProcessor) // for jar kaptTest(configurationProcessor) // for jar annotationProcessor(configurationProcessor) // for IntelliJ Idea } /* ... */ kapt { annotationProcessor("org.springframework.boot.configurationprocessor.ConfigurationMetadataAnnotationProcessor") } /* ... */ tasks { withType<KotlinCompile> { dependsOn(processResources) } }
Kotlin Kapt wird benötigt, um mit Metadaten und Speicher zu arbeiten.
Aus der offiziellen Spring-Dokumentation generiert Spring Boot Configuration Processor eine spezielle JSON-Datei mit Eigenschaftenmetadaten.
Um
jar
mit der Eigenschaftssyntax hervorzuheben, benötigen Sie daher Folgendes:jar
Packen mithilfe von zu generierendependsOn
(nicht sicher, ob mein Code oben die effektivste Lösung ist, das Problem ist jedoch gelöst).IntelliJ Idea funktioniert jedoch mit der
annotationProcessor
Gradle-Konfiguration (leider habe ich keine genaue Antwort, warum es genau erforderlich ist). Daher müssen Sie derannotationProcessor
Konfiguration auch denselben Prozessor hinzufügen .quelle
Eine Gradle-basierte Problemumgehung ist folgende:
afterEvaluate { val kaptKotlinTasks = tasks.named("kaptKotlin") { doLast { val kaptKotlin = this tasks.named<ProcessResources>("processResources") { from(kaptKotlin.outputs) { include("META-INF/spring-configuration-metadata.json") } } } } tasks.named("processResources") { this.dependsOn(kaptKotlinTasks) } }
Nach dem Ausführen eines
processResources
Builds (oder nur der Aufgabe) im Intellij Gradle-Bedienfeld sollten die Warnungen zu den Eigenschaften verschwinden.Nicht ideal, aber IntelliJ, das kapt nicht unterstützt, ist auch nicht ideal: - /
quelle
Sie deaktivieren die Inspektion in den IntelliJ-Einstellungen .
quelle