Intellij IDEA抱怨无法解决Spring Boot属性,但它们工作正常


80

在此处输入图片说明

无法解析配置属性'...

我可以通过@Value注释或通过自动装配的环境访问属性。但是我自己定义的所有属性在IDEA中都会收到此警告。我应该怎么做才能使IDEA认识到这些并且不打扰我?


1
不用担心 无论如何,IntelliJ都有一点时间来识别自定义属性。充其量您可以向JetBrains提交错误。
Makoto

1
您可以检查哪些方面与您的项目相关联。尝试按Ctrl + Alt + shift + s,然后寻找构面。您可能必须手动添加一个弹簧(引导)构面以使intellij理解
。– Tobb

我添加了弹簧面,没有任何变化。但是我的列表中没有Spring(boot)方面。也许是因为我使用的是2016版的IDEA。
Stoopkid,

是否可以提供样本项目示例进行调查?
y.bedrov

尝试安装Spring Assistant插件。
Keaz

Answers:


90

为了使IntelliJ IDEA知道您的Spring Boot属性,您可以在项目中定义Spring Boot配置元数据

选项1:

如果可以@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'

选项2:

自己创建配置元数据文件src/main/resources/META-INF/spring-configuration-metadata.json

内容:

{
  "properties": [
    {
      "name": "myapp.someprop",
      "type": "java.lang.String"
    },
    {
      "name": "myapp.someintprop",
      "type": "java.lang.Integer"
    }
  ]
}

选项1和2:

在构建系统(Maven / Gradle)的IntelliJ IDEA工具窗口中,单击“刷新”按钮。

选择Build > Rebuild Project从菜单。

如果仍然出现警告,则可以尝试重新启动IDE。选择File > Invalidate Caches / Restart并单击Invalidate and Restart


3
这正是我所需要的!我选择了选项2!
MaxPower

2
仅供参考。Spring参考>附录B.配置元数据:docs.spring.io/spring-boot/docs/current/reference/html/...
南摩

2
从菜单中选择“构建”>“重建项目”已解决了我的问题
Youness Marhrani,

我在applicaition.property中编写了属性,并在依赖关系(其他jar)中使用。能行吗
fjjiaboming

3
我强烈建议使用选项1(@ConfigurationProperties和注释处理器),因为它可以省去繁琐且易于出错的元数据文件手写。而且,在初始设置之后,它比@Value注释更容易使用。
迪蒙

1

我遇到了同样的问题,并且没有显示自动完成功能,发现它可以与IntelliJ Ultimate版本一起使用,而不与社区版本一起使用。链接

采取的几个有用步骤将是:

  • 添加Maven依赖项:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
  • 刷新Maven以下载依赖项。
  • 应对的确切名称,target/classes/META-INF/spring-configuration-metadata.js以防止发生错误。
  • 确保您的配置类带有注释,@ConfigurationProperties("name-here")并且已通过以下方式启用了该类@EnableConfigurationProperties(NameOfTheConfigClass.class)

1
对我来说,这是最完整的答案。竖起大拇指!!
mikaelovi

0

请对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突出显示属性语法,您需要:

  • 要求Gradle生成此文件
  • jar通过使用打包之前更新任务序列以生成文件dependsOn(不确定,上面的代码是最有效的解决方案,但是问题已解决)

但是IntelliJ Idea与annotationProcessorGradle配置一起使用(不幸的是,我没有确切的答案,为什么它需要确切的答案)。因此,您还需要在annotationProcessor配置中添加相同的处理器。


0

基于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也不理想:-/


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.