intellijidea抱怨无法解析spring引导属性,但它们工作正常

xqk2d5yq  于 2021-06-29  发布在  Java
关注(0)|答案(5)|浏览(583)


无法解析配置属性“。。。
我可以通过@value注解或自动连线环境访问我的属性。但我自己定义的所有属性都得到了这个警告。我应该怎么做才能让我的想法认识到这些而不打扰我?

xkrw2x1b

xkrw2x1b1#

我有同样的问题,加上没有显示自动完成发现,它与intellij终极版,而不是社区版的作品。链接
需要采取的两个有用步骤是:
添加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)

lmvvr0a8

lmvvr0a82#

在intellij设置中关闭检查。

ix0qys7i

ix0qys7i3#

为了让intellij idea知道您的spring引导属性,您可以在项目中定义spring引导配置元数据。

方案1:

如果你能用 @ConfigurationProperties -对于您的属性,您可以将spring引导配置注解处理器添加到您的类路径中,intellij idea将在中为您生成配置元数据 target 或者 out :
Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

grad尔:

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)的intellijidea工具窗口中,单击“刷新”按钮。
选择 Build > Rebuild Project 从菜单上。
如果警告仍然出现,可以尝试重新启动ide。选择 File > Invalidate Caches / Restart 点击 Invalidate and Restart .

wgxvkvu9

wgxvkvu94#

请为kotlin项目的gradle 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)
    }
}

kotlinkapt需要处理元数据和内存。
从spring官方文档中,spring引导配置处理器生成带有属性元数据的特殊json文件。
因此,分配 jar 通过属性语法突出显示,您需要:
让gradle生成这个文件
更新任务序列以在 jar 使用 Package dependsOn (不确定我上面的代码是否是最有效的解决方案,但是问题已经解决了)
然而intellij idea与 annotationProcessor gradle配置(不幸的是,我没有确切的答案,为什么它需要确切的答案)。因此,您需要将相同的处理器添加到 annotationProcessor 配置也一样。

6bc51xsx

6bc51xsx5#

基于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面板中,有关属性的警告应该消失。
不理想,但intellij不支持kapt也不理想:-/

相关问题