无法解析配置属性'...
我可以通过@Value注释或通过自动装配的环境访问属性。但是我自己定义的所有属性在IDEA中都会收到此警告。我应该怎么做才能使IDEA认识到这些并且不打扰我?
Answers:
为了使IntelliJ IDEA知道您的Spring Boot属性,您可以在项目中定义Spring Boot配置元数据。
如果可以@ConfigurationProperties
对属性使用-annotated类,则可以将Spring Boot配置注释处理器添加到类路径中,并且IntelliJ IDEA将在target
或中为您生成配置元数据out
:
Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
摇篮:
implementation 'org.springframework.boot:spring-boot-configuration-processor'
自己创建配置元数据文件src/main/resources/META-INF/spring-configuration-metadata.json
:
内容:
{
"properties": [
{
"name": "myapp.someprop",
"type": "java.lang.String"
},
{
"name": "myapp.someintprop",
"type": "java.lang.Integer"
}
]
}
在构建系统(Maven / Gradle)的IntelliJ IDEA工具窗口中,单击“刷新”按钮。
选择Build > Rebuild Project
从菜单。
如果仍然出现警告,则可以尝试重新启动IDE。选择File > Invalidate Caches / Restart
并单击Invalidate and Restart
。
@ConfigurationProperties
和注释处理器),因为它可以省去繁琐且易于出错的元数据文件手写。而且,在初始设置之后,它比@Value
注释更容易使用。
我遇到了同样的问题,并且没有显示自动完成功能,发现它可以与IntelliJ Ultimate版本一起使用,而不与社区版本一起使用。链接
采取的几个有用步骤将是:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
target/classes/META-INF/spring-configuration-metadata.js
以防止发生错误。@ConfigurationProperties("name-here")
并且已通过以下方式启用了该类@EnableConfigurationProperties(NameOfTheConfigClass.class)
请对Gradle Kotlin Kotlin项目脚本使用以下内容:
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来处理元数据和内存。
根据Spring的官方文档,Spring Boot Configuration Processor会生成带有属性元数据的特殊json文件。
因此,要jar
突出显示属性语法,您需要:
jar
通过使用打包之前更新任务序列以生成文件dependsOn
(不确定,上面的代码是最有效的解决方案,但是问题已解决)但是IntelliJ Idea与annotationProcessor
Gradle配置一起使用(不幸的是,我没有确切的答案,为什么它需要确切的答案)。因此,您还需要在annotationProcessor
配置中添加相同的处理器。
基于Gradle的解决方法是这样的:
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)
}
}
processResources
从Intellij Gradle面板运行生成(或仅执行任务)后,有关属性的警告应消失。
不太理想,但是不支持kapt的IntelliJ也不理想:-/