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.properties或application.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
被声明为依赖关系,则阻止这个工作。