Spring 使用 GraphQL Java 工具时引导应用程序启动失败

Spring Boot application failed to start when using GraphQL Java Tools

我刚刚设置了一个新的 Spring Boot application with GraphQL Java Tools。我的 Maven pom.xml 文件中的精确版本是:

虽然我的应用程序可以编译,但当我启动我的 Spring 引导应用程序时,它会失败并出现以下神秘错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

An attempt was made to call a method that does not exist. The attempt was made from the following location:

    graphql.kickstart.tools.resolver.FieldResolverScanner.findResolverMethod(FieldResolverScanner.kt:92)

The following method did not exist:

    'java.lang.String kotlin.text.CharsKt.titlecase(char)'

The method's class, kotlin.text.CharsKt, is available from the following locations:

    jar:file:/C:/Users/c-martind/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib/1.3.61/kotlin-stdlib-1.3.61.jar!/kotlin/text/CharsKt.class

It was loaded from the following location:

    file:/C:/Users/c-martind/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib/1.3.61/kotlin-stdlib-1.3.61.jar


Action:

Correct the classpath of your application so that it contains a single, compatible version of kotlin.text.CharsKt

我正在使用 Java 而不是 Kotlin,所以我不知道为什么它与 Kotlin 有问题。

根据 GraphQL Java Tools's README,您需要在 Maven pom.xml 文件的 <properties> 部分中设置 Kotlin 版本:

<properties>
    <kotlin.version>1.5.0</kotlin.version>
</properties>

如果您使用 graphl-java-tools 和 Spring 引导,您可能 运行 进入 Kotlin 版本不匹配,因为两者都依赖于 Kotlin。具体来说,Spring Boot Starter 可能会覆盖版本低于 GraphQL Java Tools 所需的版本。设置上面的 属性 会将 Kotlin 版本升级到合适的版本。如果您不覆盖此版本,您将 运行 出现类似 NoClassDefFoundError 或您在应用程序启动期间遇到的错误。