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

Intereting Posts
Есть ли ссылки на конструктор в Котлин? Spring Boot: добавление @Transactional создает java.lang.ClassNotFoundException: org.aspectj.util.PartialOrder $ PartialComparable Случай использования анонимной функции Kotlin? Ошибка раздувания фрагмента класса android kotlin Java изменяет содержимое класса kotlin на null Как установить прослушиватель движения для существующего вида Почему строка json null, когда я передаю внутренний объект Gson (). ToJson (object) в Kotlin? Используя черты с классами данных в Котлине? Невозможно использовать пользовательский getter с делегированным свойством Как высмеять окончательный класс с mockito Gradle Kotlin DSL: Определите версию Kotlin в уникальном месте Тема Kotlin Quasar и проблема блокировки канала Android Kotlin – Невозможно планировать уведомление для будущей даты с помощью диспетчера аварийных сигналов Невозможно добавить фрагменты с помощью функции расширения Kotlin Kotlin и TornadoFX: привязать наблюдаемое свойство к функции коллекции?