Groovy Maven项目getResource对有效资源路径返回null的原因排查
无法找到JSON资源文件的排查方案
针对你遇到的问题——Groovy Maven项目中,通过LayoutReader.class.getResource("/choosechee/cheeboard/layout-schema.json")获取资源返回null,但能获取到对应文件夹的URL,且已在module-info.java中导出包,可从以下几个方向排查:
1. 文件名/路径大小写不匹配
Linux类系统对文件路径大小写敏感,检查代码中写的layout-schema.json和target/classes下实际的文件名是否完全一致,包括连字符、大小写等细节。
2. Maven资源过滤导致文件未正确复制
如果pom.xml中配置了资源过滤,可能会因为过滤规则导致JSON文件未被复制或被篡改。可调整资源配置,确保JSON文件被正确处理:
<build> <resources> <!-- 对非JSON文件启用过滤 --> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>**/*.json</exclude> </excludes> </resource> <!-- 直接复制JSON文件,不做过滤 --> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>**/*.json</include> </includes> </resource> </resources> </build>
3. 切换类加载器方式获取资源
尝试使用类加载器而非类本身的getResource方法,避免类路径解析的差异:
// 注意路径开头不要加斜杠,类加载器从类路径根开始查找 URL layoutSchemaURL = LayoutReader.class.getClassLoader().getResource("choosechee/cheeboard/layout-schema.json")
4. 清理Maven构建缓存
执行mvn clean install命令,彻底清理target目录并重新构建项目,排除缓存文件导致的资源不一致问题。
内容的提问来源于stack exchange,提问作者Choosechee
相关产品推荐
相关产品推荐

