Spring boot graphql 在类路径中找不到 graphql 模式文件
Posted
技术标签:
【中文标题】Spring boot graphql 在类路径中找不到 graphql 模式文件【英文标题】:Spring boot graphql No graphql schema files found on classpath 【发布时间】:2021-12-14 09:52:32 【问题描述】:我使用 mongodb、spring-boot 和 graphql 开发了一个后端应用程序。我正在使用 Jetbrains IDEA IDE。项目可以在我的开发机器上运行,但不能在另一台计算机上运行。 Graphql 报错。
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schemaParser' defined in class path resource [graphql/kickstart/autoconfigure/tools/GraphQLJavaToolsAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [graphql.kickstart.tools.SchemaParser]: Factory method 'schemaParser' threw exception; nested exception is java.lang.IllegalStateException: No graphql schema files found on classpath with location pattern '"**/*.graphql"'. Please add a graphql schema to the classpath or add a SchemaParser bean to your application context
首先,我将我的项目打包为 jar 文件。我试图运行它并得到同样的错误。 因此,我克隆了我的项目并从源代码构建它,并尝试直接从源代码运行。但是又抛出了同样的错误。
我的应用程序.yml
graphql:
tools:
schema-location-pattern: "**/*.graphql"
playground:
enabled: true
servlet:
max-query-depth: 5
exception-handlers-enabled: true
我的 pom.xml 依赖和构建部分
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-core</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>12.0.0</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-java-tools</artifactId>
<version>12.0.0</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>voyager-spring-boot-starter</artifactId>
<version>11.1.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.12.85</version>
</dependency>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-translate</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.4.4</version>
</dependency>
<dependency>
<groupId>com.github.javafaker</groupId>
<artifactId>javafaker</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.querydsl.mongodb.morphia.MorphiaAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>
<version>1.5.8</version>
<executions>
<execution>
<id>generate-docs</id>
<phase>prepare-package</phase>
<goals>
<goal>process-asciidoc</goal>
</goals>
<configuration>
<backend>html</backend>
<doctype>book</doctype>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-asciidoctor</artifactId>
<version>$spring-restdocs.version</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
【问题讨论】:
我对 GraphQL 一无所知,但错误文本“No graphql schema files found on classpath”是否暗示了解决方案? 是的,我搜索了它,但我没有找到任何解决方案。我正确地编辑了我的问题标题。 【参考方案1】:正如例外情况所说,您没有定义任何架构或者它们是错误的!
No graphql schema files found on classpath with location pattern '"**/*.graphql"'. Please add a graphql schema to the classpath or add a SchemaParser bean to your application context
【讨论】:
我在资源文件夹下有架构文件,我检查了很多次,项目在我的电脑上运行正常。 你有什么想法,为什么找不到它们? 我想我解决了这个问题,方法是从 application.yml 中删除 schema-location-pattern,并将扩展名从 *.graphlq 更改为 *.graphqls。现在项目可以工作了。 这是以 java graphql 模式结尾的普通文件。但是您仍然可以实现自定义模式解析器,因此您可以使用标准的 graphql 文件结尾。【参考方案2】:您可以通过以下方式更改 Kickstarter 依赖项
compile group: 'com.graphql-java', name: 'graphql-spring-boot-starter', version:
'5.0.2'
compile group: 'com.graphql-java', name: 'graphql-java-tools', version: '5.2.4'
compile group: 'com.graphql-java', name: 'graphiql-spring-boot-starter', version:
'3.0.3'
【讨论】:
【参考方案3】:在这部分 No graphql schema files found on classpath with location pattern '"**/*.graphql"'
你可以看到"
,是什么破坏了路径。它应该解决。请记住,路径是相对于resources
文件夹的。
【讨论】:
【参考方案4】:我解决了这个问题,方法是从 application.yml 中删除 schema-location-pattern,并将扩展名从 *.graphlq 更改为 *.graphqls。现在项目可以工作了。
【讨论】:
以上是关于Spring boot graphql 在类路径中找不到 graphql 模式文件的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot |在类路径资源中定义名为“entityManagerFactory”的bean时出错
如何使用 graphql-spring-boot 向 GraphQL Java 添加检测?
使用 maven 和 spring boot 在类路径上检测到 log4j-over-slf4j.jar 和 slf4j-log4j12.jar
GraphQL + Spring Boot:如何收集(错误)指标?
有没有办法使用spring boot starter app graphql-spring-boot-starter公开2个graphql端点?