Intellij IDEA-Beschwerden können die Eigenschaften des Federstarts nicht auflösen, funktionieren jedoch einwandfrei

76

Geben Sie hier die Bildbeschreibung ein

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?

Stoopkid
quelle
1
Mach dir keine Sorgen darüber; IntelliJ hat sowieso etwas Zeit, benutzerdefinierte Eigenschaften zu erkennen. Bestenfalls könnten Sie einen Fehler bei JetBrains melden.
Makoto
1
Sie können überprüfen, welche Facetten Ihrem Projekt zugeordnet sind. Versuchen Sie es mit Strg + Alt + Umschalt + S und suchen Sie nach Facetten. Möglicherweise müssen Sie manuell eine Feder (Boot) -Facette hinzufügen, damit Intellij sie versteht.
Tobb
Ich habe die Frühlingsfacette hinzugefügt und es gab keine Änderung. Aber ich habe keine Spring (Boot) -Facette in meiner Liste. Vielleicht, weil ich auf einer 2016er Version von IDEA bin.
Stoopkid
Ist es möglich, ein Beispiel für ein Projektprojekt zur Untersuchung bereitzustellen?
y.bedrov
Versuchen Sie, das Spring Assistant-Plugin zu installieren.
Keaz

Antworten:

87

Damit IntelliJ IDEA Ihre Spring Boot-Eigenschaften kennt, können Sie Spring Boot-Konfigurationsmetadaten in Ihrem Projekt definieren.

Option 1:

Wenn Sie @ConfigurationPropertiesfü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 in targetoder out:

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 Projectaus dem Menü.

Wenn die Warnung weiterhin angezeigt wird, können Sie versuchen, die IDE neu zu starten. Wählen Sie File > Invalidate Caches / Restartund klicken Sie auf Invalidate and Restart.

Igor Akkerman
quelle
3
Genau das brauchte ich! Ich habe mich für Option 2 entschieden!
MaxPower
2
Zu Ihrer Information. Spring Reference> Anhang B. Konfigurationsmetadaten: docs.spring.io/spring-boot/docs/current/reference/html/…
Namo
2
Wählen Sie Build> Rebuild Project aus dem Menü, um mein Problem zu
beheben
Ich habe Eigenschaften in applicaition.property geschrieben und in Abhängigkeit (andere JAR) verwendet. Kann es funktionieren?
Fjjiaboming
3
Ich empfehle dringend, Option 1 ( @ConfigurationPropertiesund 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 @ValueAnmerkungen.
Deamon
1

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:

  • Hinzufügen einer Maven- Abhängigkeit:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
  • Aktualisiere Maven, um Abhängigkeiten herunterzuladen.
  • Kopieren des genauen Namens der Eigenschaft von target/classes/META-INF/spring-configuration-metadata.js, um Fehler zu vermeiden.
  • Stellen Sie sicher, dass Ihre Konfigurationsklasse mit Anmerkungen versehen ist @ConfigurationProperties("name-here")und dass Sie sie von aktiviert haben@EnableConfigurationProperties(NameOfTheConfigClass.class)
ToTo
quelle
1
Dies ist die vollständigste Antwort für mich. Daumen hoch Mann !!
Mikaelovi
0

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 jarmit der Eigenschaftssyntax hervorzuheben, benötigen Sie daher Folgendes:

  • Bitten Sie Gradle, diese Datei zu generieren
  • Aktualisieren Sie die Tasksequenz, um die Datei vor dem jarPacken mithilfe von zu generieren dependsOn(nicht sicher, ob mein Code oben die effektivste Lösung ist, das Problem ist jedoch gelöst).

IntelliJ Idea funktioniert jedoch mit der annotationProcessorGradle-Konfiguration (leider habe ich keine genaue Antwort, warum es genau erforderlich ist). Daher müssen Sie der annotationProcessorKonfiguration auch denselben Prozessor hinzufügen .

Manushin Igor
quelle
0

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 processResourcesBuilds (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: - /

GreenSaguaro
quelle
-29

Sie deaktivieren die Inspektion in den IntelliJ-Einstellungen .

Bild

marcusti
quelle
1
Nun gut, dass wir hier eine falsche Antwort bekommen haben ... Tu das niemals oder du bist bereit, mit vim zurück zu sein und so weiter.
Vincent
3
Erschieße nicht den Boten!
Pitto