【问题标题】:Re-run Spring Boot Configuration Annotation Processor to update generated metadata重新运行 Spring Boot 配置注释处理器以更新生成的元数据
【发布时间】: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

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

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

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

【问题讨论】:

    标签: java spring maven intellij-idea


    【解决方案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 中启用注释处理器:

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

    【讨论】:

      【解决方案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】:
        1. 包含对 spring-boot-configuration-processor 的依赖
        2. 在IDEA的Maven面板点击“Reimport All Maven Projects”
        3. 重建项目

        【讨论】:

        • 这个建议对我有用。
        【解决方案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 的缓存无效并重新启动之外,唯一对我有用的是

            1. 侧面板中的刷新按钮Reload All Gradle Projects
            2. Gradle 任务Clean
            3. 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。

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

              【讨论】:

                猜你喜欢
                • 2022-12-22
                • 2017-05-21
                • 2020-08-05
                • 2019-01-09
                • 2020-01-22
                • 1970-01-01
                • 2017-08-07
                • 2021-05-30
                • 2017-10-26
                相关资源
                最近更新 更多