2016-06-16 53 views
6

我正在尝试为基于Spring Boot的项目生成spring-configuration-metadata.json文件。如果我用Java @ConfigurationProperties类是正确的,并自动生成:在IntelliJ Idea for Kotlin @ConfigurationProperties中未生成spring-configuration-metadata.json文件

@ConfigurationProperties("myprops") 
public class MyProps { 

    private String hello; 

    public String getHello() { 
     return hello; 
    } 

    public void setHello(String hello) { 
     this.hello = hello; 
    } 
} 

但是,如果使用不产生弹簧配置 - metadata.json文件科特林级(我都试过gradle build和Idea Rebuild Project)。

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

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

任何想法为什么弹簧引导配置处理器不适用于Kotlin类?

+0

我似乎有使用groovy相同的问题 –

回答

6

谢谢你指点我在正确的方向。因此,解决方案是增加

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

的build.gradle文件,请在命令行gradle这个compileJava和IntelliJ IDEA的设置中开启了注释处理建立,执行,部署 - >编译器 - >注释处理器 - >启用加注处理。配置的其余部分保持the same

还要注意,如果没有这条线

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

的IntelliJ IDEA会抱怨蒙山

应用程序无法解析配置属性

消息。属性application.yml

+0

你可以建议一个解决方案的同一问题与groovy? –

+0

正如StéphaneNic​​oll所说,目前Spring Boot只支持Java。在基于Kotlin的项目的工作中,我得出结论:最好使用Java类来定制属性。其他一切都是编译器,编程语言和IDE的黑客和变通方法(目前)。 –

+0

我得到了这个工作正常在kotlin,使用春季启动1.4.0。不使用propdeps或java端的任何东西。在我的web模块中,使用了所有的配置,我添加了 kapt“org.springframework.boot:spring-boot-configuration-processor”,这就是它 – MrBigglesworth

1

Kotlin有它自己的编译器。元数据由作为Java编译器中的钩子点的annotation processor生成。

我不知道在Kotlin中是否有这样的钩子点,但在任何情况下,Spring Boot目前都不支持Java以外的其他任何东西。也许this would help?

+1

这可能也有帮助:https://kotlinlang.org/docs/reference/using-gradle.html#annotation-processing –

1

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

<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被声明为依赖工作。

+0

上述问题已修复,我可以确认Maven解决方案能够解决与Kotlin 1.1.4和Spring Boot 1.5.6一起使用时的框。 –