весна-конфигурация-метаданные.файл json не генерируется в IntelliJ Idea для класса Kotlin @ConfigurationProperties

Я пытаюсь создать метаданные spring-configuration -.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-конфигурация-метаданные.в JSON файл не генерируется (я пробовал оба gradle build и идея Перестроить Проект).

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

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

любые идеи, почему spring-boot-конфигурация-процессор не работает с классами Kotlin?

3 ответов


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

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

to построить.Gradle в file, run gradle compileJava в командной строке и включите обработку аннотаций в настройках IntelliJ Idea сборка, выполнение, развертывание -> компилятор -> обработчик аннотаций -> включить обработку анотаций. Остальная часть конфигурации остается тот же

также обратите внимание, что без этого линия

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

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

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

сообщение в вашей приложение.свойства или приложение.в формате YML


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


Kotlin имеет свой собственный компилятор. Метаданные генерируются с помощью процессор аннотации это точка подключения в компиляторе Java.

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