Spring 使用 GraphQL Java 工具时引导应用程序启动失败
Spring Boot application failed to start when using GraphQL Java Tools
我刚刚设置了一个新的 Spring Boot application with GraphQL Java Tools。我的 Maven pom.xml 文件中的精确版本是:
com.graphql-java-kickstart:graphql-spring-boot-starter:12.0.0
com.graphql-java-kickstart:graphiql-spring-boot-starter:11.1.0
com.graphql-java-kickstart:graphql-java-tools:12.0.0
虽然我的应用程序可以编译,但当我启动我的 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
或您在应用程序启动期间遇到的错误。
我刚刚设置了一个新的 Spring Boot application with GraphQL Java Tools。我的 Maven pom.xml 文件中的精确版本是:
com.graphql-java-kickstart:graphql-spring-boot-starter:12.0.0
com.graphql-java-kickstart:graphiql-spring-boot-starter:11.1.0
com.graphql-java-kickstart:graphql-java-tools:12.0.0
虽然我的应用程序可以编译,但当我启动我的 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
或您在应用程序启动期间遇到的错误。