Ошибка загрузки Spring Boot + Kotlin

У меня есть приложение Spring Boot 2.0.0.M2 (с WebFlux), написанное в Котлине.

Я использую для определения / объявления «аннотаций» для тестовых случаев, чтобы избежать некоторой конфигурации шаблонов; что-то вроде:

 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 

… тогда в моих тестах я использую его как:

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

Проблема в том, что я не могу добиться того же, используя аннотации, предоставленные Kotlin:

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

Я получаю this annotation is not applicable to target 'class' внутри PersonWorkflowTest . Если я использую Java, все в порядке, но, с другой стороны, я получаю эти предупреждения – от чего я действительно пытаюсь избавиться 🙂

 ... :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 

Kotlin Ошибка аннотации (ов) с помощью Spring Boot

kotlin имеет свой собственный @kotlin.annotation.Retention и @kotlin.annotation.Target аннотации. возьмите время, чтобы посмотреть документацию анкеты kotlin, пожалуйста.

редактировать

Я тестировал его в весеннем кадре, что не проблема. Обратите внимание, что они имеют различие в @Target между java и kotlin.

kotlin kotlin.annotation.@Target(AnnotationTarget.CLASS) переводится на:

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

и kotlin kotlin.annotation.@Target(AnnotationTarget.TYPE) переводится на:

 @java.lang.annotation.Target; 

что означает, что AnnotationTarget.TYPE не поддерживается для java. он просто использовался в котлин. поэтому ваша собственная аннотация должна быть такой:

 //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;