Spring Boot GraphQL项目跨设备运行提示找不到类路径下graphql schema文件
问题根因
这个报错有两个核心诱因:
- application.yml中GraphQL schema扫描路径配置存在多余的转义双引号,导致框架实际扫描时会把引号当成路径的一部分,自然匹配不到真实文件
- 你的pom.xml没有配置资源拷贝规则,maven默认打包时不会把
.graphql后缀的schema文件打入jar包的classpath下
本地IDEA能正常运行是因为IDEA运行时默认会把src/main/resources下所有文件都加载到classpath,且配置解析时会自动处理转义字符,才没有触发报错。
解决步骤
1. 修复application.yml配置
删除schema-location-pattern值的多余转义引号,修改后配置如下:
graphql: tools: schema-location-pattern: **/*.graphql playground: enabled: true servlet: max-query-depth: 5 exception-handlers-enabled: true
如果习惯加引号包裹配置值,直接写普通双引号即可,不要用HTML转义的"实体。
2. 新增maven资源拷贝规则
在pom.xml的<build>标签下添加resources配置,明确要求maven把.graphql后缀的文件打包到classpath:
<build> <!-- 新增resources节点,原有plugins配置保留不动 --> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.yml</include> <include>**/*.graphql</include> <include>**/*.graphqls</include> </includes> <filtering>false</filtering> </resource> </resources> <plugins> <!-- 你原有插件的配置全部保留,不需要修改 --> </plugins> </build>
3. 验证schema文件路径
确认所有GraphQL schema文件都存放在src/main/resources目录下(可以放在子目录中,**/*.graphql规则会递归扫描所有子目录)。
4. 重新构建运行
执行mvn clean package重新打包,之后不管是直接运行jar包还是在其他设备克隆源码构建运行,都不会再触发该报错。
内容的提问来源于stack exchange,提问作者Esef Berfu Şentürk
相关产品推荐
相关产品推荐

