繁体   English   中英

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

[英]Re-run Spring Boot Configuration Annotation Processor to update generated metadata

我已经添加:

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

根据intellij的请求/警告到我的pom.xml

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

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

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

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

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

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

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

这些选项都不适合我。 我发现注释处理器的自动检测非常不稳定。 我最终在 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 Preferences -> Editor -> General -> Appearance,取消选中“Show Spring Boot metadata panel”。

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

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

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

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

如果你碰巧像我一样忽略了 IntelliJ 中的这个文件夹(因为到底是什么,谁在乎类文件?),你的 IDE 不会索引该文件。 因此,没有完成,烦人的消息。

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

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

  1. 包括对 spring-boot-configuration-processor 的依赖
  2. 点击IDEA的Maven面板中的“Reimport All Maven Projects”
  3. 重建项目

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

我只是需要

@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

我有同样的问题。 就我而言,我错过了 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。

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

以上都不适用于我的情况,但让我很接近。 最后,在 maven-compiler-plugin 中明确定义所有必需的 annotationProcessors 为我解决了这个问题。 就我而言,这是:Spring-Boot + Lombok + 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 + 中收到一些警告,一些属性被标记为“未使用”,即使它们是在使用 @ConfigurationProperties 的类中定义的

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM