2016-06-16 87 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一起使用時的框。 –