在 Spring Boot 中解析 graphql 模式时出错,如何解决?

Error parsing graphql schema in Springboot, how to fix it?

我有一个项目,我在其中使用 Springboot 和 GraphQL。

我正在使用 Java11 和 Gradle 5.6.2。

在我的模块中,我为 GraphQl 添加了这些依赖项。

    // GraphQl
    implementation 'com.graphql-java-kickstart:graphql-spring-boot-starter:5.10.0'
    implementation 'com.graphql-java:graphiql-spring-boot-starter:5.0.2'
    implementation 'com.graphql-java-kickstart:voyager-spring-boot-starter:5.10.0'
    implementation 'com.graphql-java-kickstart:graphql-java-tools:5.6.1'

在我的 src/main/java/no.domain.project 中,我有我的 SpringbootApplication。我还有一个名为 RootResolver 的文件夹,我在其中添加了以下内容 class:

@Component
public class RootResolver implements GraphQLQueryResolver{

    public String getHello() {
        return "Hello World";
    }
}

我的 schema.graphqls 有以下查询:

type Query {
    hello: String!
}

我可以使用 404 访问 localhost:8080/grapiql

但是当我 运行 项目时,我得到以下错误:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'graphQLServletRegistrationBean' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'graphQLServletRegistrationBean' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'graphQLHttpServlet' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'graphQLHttpServlet' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'graphQLServletConfiguration' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'graphQLServletConfiguration' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'invocationInputFactory' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'invocationInputFactory' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'graphQLSchemaProvider' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'graphQLSchemaProvider' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.oembedler.moon.graphql.boot.GraphQLJavaToolsAutoConfiguration': Unsatisfied dependency expressed through field 'options'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schemaParserOptions' defined in no.inmeta.ris.web.Application: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.coxautodev.graphql.tools.SchemaParserOptions]: Factory method 'schemaParserOptions' threw exception; nested exception is java.lang.NoClassDefFoundError: kotlin/coroutines/ContinuationInterceptor

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'graphQLHttpServlet' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'graphQLHttpServlet' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'graphQLServletConfiguration' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'graphQLServletConfiguration' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'invocationInputFactory' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'invocationInputFactory' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'graphQLSchemaProvider' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'graphQLSchemaProvider' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.oembedler.moon.graphql.boot.GraphQLJavaToolsAutoConfiguration': Unsatisfied dependency expressed through field 'options'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schemaParserOptions' defined in no.inmeta.ris.web.Application: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.coxautodev.graphql.tools.SchemaParserOptions]: Factory method 'schemaParserOptions' threw exception; nested exception is java.lang.NoClassDefFoundError: kotlin/coroutines/ContinuationInterceptor

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'graphQLServletConfiguration' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'graphQLServletConfiguration' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'invocationInputFactory' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'invocationInputFactory' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'graphQLSchemaProvider' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'graphQLSchemaProvider' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.oembedler.moon.graphql.boot.GraphQLJavaToolsAutoConfiguration': Unsatisfied dependency expressed through field 'options'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schemaParserOptions' defined in no.inmeta.ris.web.Application: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.coxautodev.graphql.tools.SchemaParserOptions]: Factory method 'schemaParserOptions' threw exception; nested exception is java.lang.NoClassDefFoundError: kotlin/coroutines/ContinuationInterceptor

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'invocationInputFactory' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'invocationInputFactory' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'graphQLSchemaProvider' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'graphQLSchemaProvider' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.oembedler.moon.graphql.boot.GraphQLJavaToolsAutoConfiguration': Unsatisfied dependency expressed through field 'options'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schemaParserOptions' defined in no.inmeta.ris.web.Application: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.coxautodev.graphql.tools.SchemaParserOptions]: Factory method 'schemaParserOptions' threw exception; nested exception is java.lang.NoClassDefFoundError: kotlin/coroutines/ContinuationInterceptor

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'graphQLSchemaProvider' defined in class path resource [com/oembedler/moon/graphql/boot/GraphQLWebAutoConfiguration.class]: Unsatisfied dependency expressed through method 'graphQLSchemaProvider' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.oembedler.moon.graphql.boot.GraphQLJavaToolsAutoConfiguration': Unsatisfied dependency expressed through field 'options'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schemaParserOptions' defined in no.inmeta.ris.web.Application: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.coxautodev.graphql.tools.SchemaParserOptions]: Factory method 'schemaParserOptions' threw exception; nested exception is java.lang.NoClassDefFoundError: kotlin/coroutines/ContinuationInterceptor

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.oembedler.moon.graphql.boot.GraphQLJavaToolsAutoConfiguration': Unsatisfied dependency expressed through field 'options'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schemaParserOptions' defined in no.inmeta.ris.web.Application: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.coxautodev.graphql.tools.SchemaParserOptions]: Factory method 'schemaParserOptions' threw exception; nested exception is java.lang.NoClassDefFoundError: kotlin/coroutines/ContinuationInterceptor

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schemaParserOptions' defined in no.inmeta.ris.web.Application: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.coxautodev.graphql.tools.SchemaParserOptions]: Factory method 'schemaParserOptions' threw exception; nested exception is java.lang.NoClassDefFoundError: kotlin/coroutines/ContinuationInterceptor

我缩短了错误信息。

是什么导致了这个问题。我看到它没有选择我的架构,但为什么会这样?我看过很多我做同样事情的教程,但我收到了这个错误。

有什么建议吗?

感谢帮助!

我弄明白了 :) 我需要添加一个 gradle.properties 文件并添加 kotlin.version=1.3.50 因为当你开始 SpringApplication 时你会得到错误 NoClassDefFoundException 因为 Spring Boot 覆盖库正在使用的 Kotlin 版本。