重新运行 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
而不是定义单个类。 <annotationProcessorPaths><path><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><version>$parent.version</version></path>...
对我来说,它在没有 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 > Editor > File Types > 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 单元测试,无需重新加载上下文以加快测试速度