在IntelliT Idea for Kotlin @ConfigurationProperties类中未生成spring-configuration-metadata.json文件

时间:2016-06-16 12:10:23

标签: spring intellij-idea gradle spring-boot kotlin

我正在尝试为基于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 重建项目)。

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

AFAIK Kotlin使用构造函数,getter和setter生成相同的类,并且应该充当常规Java bean。

为什么 spring-boot-configuration-processor 不能与Kotlin类一起使用?

3 个答案:

答案 0 :(得分:10)

感谢您指点我正确的方向。所以解决方案是添加

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

build.gradle 文件,在命令行中运行 gradle compileJava 并在IntelliJ Idea设置构建,执行,部署 - >中打开注释处理。编译器 - >注释处理器 - >启用anotation处理。其余配置仍为the same

另请注意,没有这一行

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

IntelliJ Idea会抱怨

  

无法解析配置属性

application.properties application.yml

中的

消息

答案 1 :(得分:3)

对于那些想要使用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>

如果将kotlin-maven-allopen之类的编译器插件声明为依赖项,则存在一个未解决的问题KT-18022

答案 2 :(得分:1)

Kotlin有自己的编译器。元数据由annotation processor生成,this would help?是Java编译器中的一个钩点。

我不知道Kotlin中是否有这样的钩点,但无论如何,Spring Boot目前不支持Java以外的任何其他东西。也许this