Файл spring-configuration-metadata.json не генерируется в IntelliJ Idea для класса Kotlin @ConfigurationProperties

Я пытаюсь создать файл spring-configuration-metadata.json для моего проекта Spring Boot. Если я использую класс 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 не генерируется (я пробовал как сборку градации, так и проект Idea Rebuild ).

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

AFAIK Kotlin генерирует один и тот же класс с конструктором, getters и сеттерами и должен выступать в качестве обычного Java-компонента.

Любые идеи, почему Spring-Boot-Configuration-процессор не работает с классами Kotlin?

Спасибо, что указал мне в правильном направлении. Таким образом, решение состоит в том, чтобы добавить

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

для сборки файла.gradle , запустить gradle compileJava в командной строке и включить обработку аннотаций в настройках IntelliJ Idea Build, Execution, Deployment -> Compiler -> Обработчик аннотации -> Включить обработку анотаций . Остальная конфигурация остается той же

Также обратите внимание, что без этой строки

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

IntelliJ Idea будет жаловаться

Не удается разрешить свойство конфигурации

сообщение в вашем приложении application.properties или application.yml

У Котлина есть свой собственный компилятор. Метаданные генерируются обработчиком аннотации, который является точкой перехвата в компиляторе Java.

Я понятия не имею, доступен ли такой крючок в Kotlin, но в любом случае Spring Boot не поддерживает ничего, кроме Java на данный момент. Может быть, это поможет?

Для тех, кто хочет использовать 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 , объявлен как зависимость.