Spring Boot Kotlin 1.7.20 K2 编译器 Spring 插件不起作用



我试图在我的Spring Boot应用程序中使用Kotlin K2编译器。

不幸的是,Spring Kotlin插件似乎还不受支持,或者我的配置有问题。

正如官方博客文章所说,all-open&支持no-arg插件。尽管Kotlin插件似乎还不受支持,即使它包含了这两个插件?

当我在build.gradle.kts文件中启用以下设置时启动应用程序:

plugins {
id("org.springframework.boot") version "2.7.4"
id("io.spring.dependency-management") version "1.0.14.RELEASE"
kotlin("jvm") version "1.7.20"
kotlin("plugin.spring") version "1.7.20"
}

通过"-Xuse-k2"选项启用K2编译器:

tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xuse-k2")
jvmTarget = "17"
}
}

应用程序无法启动,出现以下堆栈:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: @Configuration class 'MyConfigurationClass' may not be final. Remove the final modifier to continue.
Offending resource: class path resource [com/my/path/MyConfigurationClass.class]
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:72) ~[spring-beans-5.3.23.jar:5.3.23]
at org.springframework.context.annotation.ConfigurationClass.validate(ConfigurationClass.java:217) ~[spring-context-5.3.23.jar:5.3.23]
at org.springframework.context.annotation.ConfigurationClassParser.validate(ConfigurationClassParser.java:215) ~[spring-context-5.3.23.jar:5.3.23]
at org.springframework.context.annotation ..

这告诉我CCD_ 5插件似乎不再工作了。

有人能为他们基于Kotlin的Spring Boot应用程序使用K2编译器插件吗?

K2编译器似乎有一个带有可传递元注释的错误:https://youtrack.jetbrains.com/issue/KT-53590/K2-Allopen-does-not-look-for-transitive-meta-annotations

对我来说,解决办法是在build.gradle(.kts(:中手动添加我们在spring服务中使用的注释

allOpen {
annotation("org.springframework.context.annotation.Configuration")
annotation("org.springframework.boot.autoconfigure.SpringBootApplication")
}

请注意,k2编译器仍处于alpha状态。因此,希望这将在不久的将来得到解决。

最新更新