IntelliJ Idea for Kotlin @ConfigurationProperties类中不生成spring-configuration-metadata.json文件

我试图为我的基于Spring Boot的项目生成spring-configuration-metadata.json文件。 如果我使用Java @ConfigurationProperties类,它会自动正确生成:

@ConfigurationProperties("myprops") public class MyProps { private String hello; public String getHello() { return hello; } public void setHello(String hello) { this.hello = hello; } } 

但是,如果我使用Kotlin类,则不会生成spring-configuration-metadata.json文件(我已经尝试了gradle build和Idea Rebuild Project )。

 @ConfigurationProperties("myprops") class MyProps { var hello: String? = null } 

AFAIK Kotlin与构造函数,getter和setter生成相同的类,并且应该像普通的Java bean一样。

任何想法为什么春季启动配置处理器不适用于Kotlin类?

谢谢你指出我正确的方向。 所以解决方法是添加

 dependencies { ... kapt "org.springframework.boot:spring-boot-configuration-processor" optional "org.springframework.boot:spring-boot-configuration-processor" ... } 

build.gradle文件,在命令行运行gradle compileJava ,并打开IntelliJ Idea设置的构建,执行,部署 – >编译器 – >注释处理器 – >启用批注处理 。 剩下的配置保持不变

另外请注意,没有这一行

 optional "org.springframework.boot:spring-boot-configuration-processor" 

IntelliJ Idea会抱怨whith

无法解析配置属性

消息在你的application.propertiesapplication.yml中

Kotlin有它自己的编译器。 元数据是由Java编译器中的一个钩子注释处理器生成的。

我不知道在Kotlin中是否有这样的钩子,但在任何情况下,Spring Boot现在都不支持Java以外的东西。 也许这会有所帮助?

对于那些想要使用Maven而不是Gradle的人来说,你需要在kotlin-maven-plugin配置中添加一个kapt执行。

 <execution> <id>kapt</id> <goals> <goal>kapt</goal> </goals> <configuration> <sourceDirs> <sourceDir>src/main/kotlin</sourceDir> </sourceDirs> <annotationProcessorPaths> <annotationProcessorPath> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>1.5.3.RELEASE</version> </annotationProcessorPath> </annotationProcessorPaths> </configuration> </execution> 

有一个开放的问题KT-18022 ,如果一个编译器插件如kotlin-maven-allopen被声明为依赖关系,则阻止这个工作。