Spring Boot + error (s) de anotación de Kotlin

Tengo una aplicación Spring Boot 2.0.0.M2 (con WebFlux) escrita en Kotlin.

Estoy acostumbrado a definir / declarar "annotations" para casos de testing con el fin de evitar una configuration repetitiva; algo como:

 import java.lang.annotation.ElementType import java.lang.annotation.Inherited import java.lang.annotation.Retention import java.lang.annotation.RetentionPolicy import java.lang.annotation.Target ... @Inherited @Target(ElementType.TYPE) @AutoConfigureWebTestClient // TODO: FTW this really does?! @Retention(RetentionPolicy.RUNTIME) //@kotlin.annotation.Target(AnnotationTarget.TYPE) //@kotlin.annotation.Retention(AnnotationRetention.RUNTIME) @ActiveProfiles(profiles = arrayOf("default", "test")) @ContextConfiguration(classes = arrayOf(Application::class)) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) annotation class SpringWebFluxTest 

… luego en mis testings lo uso como:

 @SpringWebFluxTest @RunWith(SpringRunner::class) class PersonWorkflowTest { private lateinit var client: WebTestClient ... 

El problema es que no puedo lograr lo mismo usando las annotations proporcionadas por Kotlin:

 @kotlin.annotation.Target(AnnotationTarget.TYPE) @kotlin.annotation.Retention(AnnotationRetention.RUNTIME) 

PersonWorkflowTest una this annotation is not applicable to target 'class' dentro de PersonWorkflowTest . Si uso los de Java, todo está bien, pero por otro lado recibo estas advertencias, de lo que estoy tratando de deshacerme 🙂

 ... :compileTestKotlin w: /home/gorre/Workshop/kotlin-spring-boot-reactive/src/test/kotlin/io/shido/annotations/SpringWebFluxTest.kt: (18, 1): This annotation is deprecated in Kotlin. Use '@kotlin.annotation.Target' instead w: /home/gorre/Workshop/kotlin-spring-boot-reactive/src/test/kotlin/io/shido/annotations/SpringWebFluxTest.kt: (20, 1): This annotation is deprecated in Kotlin. Use '@kotlin.annotation.Retention' instead 

Error de la anotación de Kotlin con Spring Boot

kotlin tiene sus propias @kotlin.annotation.Retention y @kotlin.annotation.Target . tómate un time para mirar la documentation de la anotación de kotlin por favor.

Editar

Lo he probado en springframework que no hay problema. Tenga en count que tiene una distinción en @Target entre java y kotlin.

kotlin kotlin.annotation.@Target(AnnotationTarget.CLASS) se traduce a:

 @java.lang.annotation.Target(ElementType.TYPE); 

y kotlin kotlin.annotation.@Target(AnnotationTarget.TYPE) se traduce a:

 @java.lang.annotation.Target; 

lo que significa que AnnotationTarget.TYPE no es compatible con Java. simplemente lo usé en kotlin. entonces tu propia anotación debería ser así:

 //spring-test annotations @ActiveProfiles(profiles = arrayOf("default", "test")) @ContextConfiguration(classes = arrayOf(Application::class)) //spring-boot annotations @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @AutoConfigureWebTestClient //kotlin annotations @Target(AnnotationTarget.CLASS) @Retention(AnnotationRetention.RUNTIME)// can remove it default is RUNTIME annotation class SpringWebFluxTest;