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

Posted

技术标签:

【中文标题】重新运行 Spring Boot 配置注释处理器以更新生成的元数据【英文标题】:Re-run Spring Boot Configuration Annotation Processor to update generated metadata 【发布时间】:2016-02-02 16:41:03 【问题描述】:

我已添加:

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

根据intellij 的请求/警告发送给我的pom.xml

现在我看到“”。

我该如何做intellij 要求我做的事情?

此链接B.2 Generating your own meta-data using the annotation processor 没有说明。

【问题讨论】:

【参考方案1】:

按照这些说明对我有用:http://www.mdoninger.de/2015/05/16/completion-for-custom-properties-in-spring-boot.html

关于必须重新运行注释处理器的消息有点令人困惑,因为它似乎一直停留在那里,即使没有任何变化。

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

您可能还需要单击 Maven 窗格中的“重新导入所有 Maven 项目”按钮,以获取 .yaml 文件视图以识别返回到相应 Java 类的链接。

【讨论】:

所以没有办法摆脱这个消息? @OrangeDog 我找不到。我已经学会忽略它,但您始终可以向 JetBrains 提出功能请求。你会想象他们可能会对此更聪明一点,并且只有在他们知道类文件或配置文件实际上已更改时才显示它 重建项目后错误信息仍然存在。 “关键似乎是重建项目”帮助了我。该消息仍然存在,但至少我在application.properties 文件中的自定义属性的自动完成功能开始起作用了。 我用的是IDEA 2018.3,短信后面有个链接“隐藏通知”。看起来好像 JetBrains 使信息可关闭:-)【参考方案2】:

这些选项都不适合我。我发现注释处理器的自动检测非常不稳定。我最终在 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>

【讨论】:

这个对我有用。我使用annotationProccessorPaths 而不是定义单个类。 &lt;annotationProcessorPaths&gt;&lt;path&gt;&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;&lt;artifactId&gt;spring-boot-configuration-processor&lt;/artifactId&gt;&lt;version&gt;$parent.version&lt;/version&gt;&lt;/path&gt;... 对我来说,它在没有 maven-compiler-plugin 的情况下工作,我只需要 spring-boot-maven-plugin(版本 2.5.5)。【参考方案3】:

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

但是,您也可以接受该消息,如果它不会给您带来太多困扰,那么请确保您不会错过您可能感兴趣的任何其他 Spring Boot 元数据消息。

【讨论】:

复选框与 IDEA 2017.2 下的 Preferences -> Languages & Frameworks -> Spring -> Spring Boot【参考方案4】:

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

    点击文件 点击设置 在左上角的小搜索框中,搜索“注释处理器” 勾选“启用注释处理” 点击确定

【讨论】:

【参考方案5】:

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

如果你碰巧像我一样忽略了 IntelliJ 中的这个文件夹(因为见鬼,谁在乎类文件?),你的 IDE 不会索引该文件。因此,没有完成,而且令人讨厌的消息。

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

【讨论】:

我在忽略的文件中没有看到target。不过它在我的.gitignore 中。 target/ 在我的情况下被排除在外,一切正常。 无论是否排除目标都将使用它(我是负责此功能的开发人员)。如果您可以重现此错误行为,请提交错误报告。 那么哪个版本的 IntelliJ 运行正常? @YannCébron 与 gradle 相同。该文件在 ./build/classes/java/main/META-INF/spring-configuration-metadata.json 中创建,但 IntelliJ 没有考虑到它。如果我手动将 json 文件移动到 src/main/resources/META-INF 它可以工作(配置不再变黄)【参考方案6】:

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

【讨论】:

【参考方案7】:
    包含对 spring-boot-configuration-processor 的依赖 在IDEA的Maven面板点击“Reimport All Maven Projects” 重建项目

【讨论】:

这个建议对我有用。【参考方案8】:

我只是需要

@EnableConfigurationProperties(MY_PROPS_CLASS.class)

在主应用程序类中,它帮助我解决了这个问题

【讨论】:

【参考方案9】:

我在使用 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

【讨论】:

【参考方案10】:

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

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

除了使 IntelliJ 的缓存无效并重新启动之外,唯一对我有用的是

    侧面板中的刷新按钮Reload All Gradle Projects Gradle 任务Clean Gradle 任务Build

【讨论】:

【参考方案11】:

我遇到了同样的问题。就我而言,我错过了 spring-boot-maven-plugin。

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

以及@Data Lombok 注释

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

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

那你还必须记得重新导入并重新编译你的项目。

【讨论】:

以上是关于重新运行 Spring Boot 配置注释处理器以更新生成的元数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 IntelliJ 上使用 @ConfigurationProperties 为 Spring Boot 配置注释处理器进行配置?

@ConfigurationProperties Spring Boot 配置注释处理器在类路径中找不到

如何在 Angular、spring-boot、maven 项目中配置项目以自动重新加载浏览器

编辑并重新运行 Spring Boot 单元测试,无需重新加载上下文以加快测试速度

Spring Boot - 如何在不使用 spring 注释的情况下在运行时获取端口

如何在运行时更新 Spring Boot 应用程序的配置而不重新加载整个 ApplicationContext