重新运行 Spring 引导配置注释处理器以更新生成的元数据

我补充道:

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

根据 intellij的要求/警告,转到我的 pom.xml

现在我看到了“重新运行 Spring 引导配置注释处理器以更新生成的元数据”。

我该怎么做 intellij要求我做的事情?

这个链接 使用注释处理器生成您自己的元数据没有说明。

141970 次浏览

按照这些指示为我工作: http://www.mdoninger.de/2015/05/16/completion-for-custom-properties-in-spring-boot.html

关于必须重新运行注释处理器的消息有点令人困惑,因为即使没有任何改变,它似乎始终保持在那里。

关键似乎是在添加所需的依赖项之后重新构建项目,或者在进行任何属性更改之后重新构建项目。完成该操作并返回到 YAML 文件之后,我的所有属性现在都链接到配置类。

您可能还需要单击 Maven 窗格中的“ Reimport All Maven Projects”按钮才能获取。Yaml 文件视图来识别回到相应 Java 类的链接。

我也有同样的问题。问题是 SpringBoot 注释处理器在 /target/classes/META-INF文件夹中生成 spring-configuration-metadata.json文件。

如果您碰巧像我一样忽略了 IntelliJ 中的这个文件夹(因为管他呢,谁在乎类文件呢?),则 IDE 将不会对该文件进行索引。因此,没有完成,和恼人的消息。

只需从位于 Settings > Editor > File Types > Ignore files and folders的忽略文件/文件夹列表中删除 target

没有一个答案对我有用。如果您只想禁用消息,请转到 Intellij Preferences-> Editor-> General-> 卖相,取消选中“ Show Spring Boot meta panel”。

但是,如果这个消息不会太麻烦您,您也可以使用它,以确保您不会错过任何其他您可能感兴趣的 Spring Boot 元数据消息。

这些选择对我都不管用。我发现注释处理器的自动检测非常古怪。最后,我在 pom.xml 文件中创建了一个插件部分,它显式地设置了用于项目的注释处理器。这样做的好处是不需要依赖任何 IDE 设置。

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<compilerVersion>1.8</compilerVersion>
<source>1.8</source>
<target>1.8</target>
<annotationProcessors>
<annotationProcessor>org.springframework.boot.configurationprocessor.ConfigurationMetadataAnnotationProcessor</annotationProcessor>
<annotationProcessor>lombok.launch.AnnotationProcessorHider$AnnotationProcessor</annotationProcessor>
<annotationProcessor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</annotationProcessor>
</annotationProcessors>
</configuration>
</plugin>

可以通过以下方式在 IntelliJ 中启用注释处理器:

  1. 点击文件
  2. 点击设置
  3. 在左上角的小搜索框中,搜索“批注处理器”
  4. 选中“启用注释处理”
  5. 单击 OK
  1. 包含一个对 Spring-boot-configuration-Processing 的依赖项
  2. 在 IDEA 的 Maven 面板中单击“ Reimport All Maven Projects”
  3. 重建项目

对我来说,其他答案都不起作用。我不得不打开 Files,在 Intellij 上做 Invalidate caches and restart。之后,一切又恢复正常了。

build.gradle中包含了对 spring-boot-configuration-processor的依赖:

annotationProcessor "org.springframework.boot:spring-boot-configuration-processor:2.4.1"

除了使 IntelliJ 缓存失效并重新启动之外,对我来说唯一有效的方法是

  1. 刷新侧面板 Reload All Gradle Projects中的按钮
  2. 分级任务 Clean
  3. 分级任务 Build

我也有同样的问题,在我的例子中,我错过了 Spring-boot-maven-plugin。

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

以及@Data 龙目岛注释

@Configuration
@ConfigurationProperties("logging.web")
@Data
public class LoggingWebConfiguration {
// ...
}

显然,您也可以自己创建 getter/setter。

然后还必须记住重新导入和重新编译项目。

我只是需要

@EnableConfigurationProperties({MY_PROPS_CLASS.class})

它帮助我解决了这个问题

我在使用 Gradle 和 Kotlin 时也遇到了类似的问题。 您应该修改 build.gradle.kts文件以包括以下内容:

//build.gradle.kts
plugins {
// ...
kotlin("kapt") version "1.5.31"
}




dependencies {
// ...


kapt("org.springframework.boot:spring-boot-configuration-processor")
}

然后,生成注释:

./gradlew kaptKotlin

参考文献: https://spring.io/guides/tutorials/spring-boot-kotlin/#_configuration_properties

以上这些都不适用于我的情况,但却让我更接近真相。最后,在 maven 编译器插件中显式定义所有必需的注释处理器解决了这个问题。我的例子是: Spring-Boot + 龙目岛 + MapStruct

  <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<annotationProcessorPaths>
<annotationProcessorPath>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>${spring-boot-configuration-processor.version}</version>
</annotationProcessorPath>
<annotationProcessorPath>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</annotationProcessorPath>
<annotationProcessorPath>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</annotationProcessorPath>
</annotationProcessorPaths>
</configuration>
</plugin>

在此之前,我总是在 application.properties 的 Class + 中收到一些警告,有些属性被标记为“ unused”,即使它们是在具有@ConfigurationProperties 的类中定义的

在 Idea 的 maven 面板中,在 maven 生命周期中进行清理和编译对我来说很有用。