El file spring-configuration-metadata.json no se genera en IntelliJ Idea for Kotlin @ConfigurationProperties class

Estoy intentando generar el file spring-configuration-metadata.json para mi proyecto basado en Spring Boot. Si utilizo la class Java @ConfigurationProperties , se genera de forma correcta y automática:

@ConfigurationProperties("myprops") public class MyProps { private String hello; public String getHello() { return hello; } public void setHello(String hello) { this.hello = hello; } } 

Pero si utilizo la class Kotlin, el file spring-configuration-metadata.json no se genera (he intentado tanto gradle build como Idea Rebuild Project ).

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

AFAIK Kotlin genera la misma class con constructor, getters y setters y debe actuar como bean Java regular.

¿Alguna idea de por qué spring-boot-configuration-processor no funciona con las classs de Kotlin?

Gracias por apuntarme en la dirección correcta. Entonces la solución es agregar

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

Para comstackr el file build.gradle , ejecute gradleJava en la command-line y active el process de anotación en la configuration de IntelliJ Idea. Build, Execution, Deployment -> Compiler -> Annotation processor -> Enable anotation processing . El rest de la configuration sigue siendo la misma

También tenga en count que sin esta línea

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

IntelliJ Idea se quejará con

No se puede resolver la propiedad de configuration

post en su application.properties o application.yml

Kotlin tiene su propio comstackdor. Los metadatos son generados por un procesador de anotación que es un punto de enlace en el comstackdor de Java.

No tengo idea de si ese punto de enlace está disponible en Kotlin, pero en cualquier caso, Spring Boot no es compatible con nada más que Java en este momento. Tal vez esto ayudaría?

Para aquellos que quieran usar Maven en lugar de Gradle, debe agregar una ejecución kapt a la configuration de 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> 

Hay un problema abierto KT-18022 que impide que esto funcione si un plugin de compilation como kotlin-maven-allopen se declara como dependencia.

  • Spring Boot e Hibernate. Manejar la fábrica de sesiones
  • Jackson ready only collections
  • ¿Cómo habilitar la authentication de portador en la aplicación Spring Boot?
  • Spring Boot: no puede include recurso estático
  • Spring Boot @ Autoajustado con Kotlin en @Service siempre es nulo
  • SpringBoot ArrayIndexOutOfBoundsException MethodParameter.getGenericParameterType
  • Analizando un object json con un campo dynamic en Kotlin
  • Estado de respuesta HTTP SpringBoot Kotlin Api
  • Configure Jackson para usar SNAKE_CASE "globalmente" en Spring Boot 2.0.0.M1
  • Kotlin + Spring Boot solicita sorting
  • Kotlin + SpringBoot 2.0.0-M4 falló en el context de la aplicación de carga (BeanCreationException)