You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle run时getClass().getClassLoader().getResource()返回Null问题

问题解决:Gradle运行时无法加载资源文件

根本原因

你在代码中使用src/main/resources/File作为资源路径是错误的:

  • IntelliJ运行时会将源码目录(包括src/main/resources)直接加入类路径,所以这种非标准路径能临时生效
  • Gradle构建后,资源文件会被复制到build/resources/main目录下的对应包路径中,此时类路径的根是build/classes/java/main和build/resources/main,src/main/resources这个源码路径在运行时根本不存在于类路径中

解决方案

1. 修正资源加载路径

根据你的项目结构,资源文件位于src/main/resources/it/uni/cs/name/progettofinaledatemplate/下,需要使用类路径相对路径加载:

  • 如果资源与当前类在同一个包下(比如你在it.uni.cs.name.progettofinaledatemplate.controller包的类中加载资源),直接使用:
    URL url = getClass().getResource("File");
    
  • 如果资源在全局包路径下,使用类加载器加载时,路径要从类根目录开始:
    URL url = getClass().getClassLoader().getResource("it/uni/cs/name/progettofinaledatemplate/File");
    
    ✅ 注意:路径开头不要加/,也不要包含src/main/resources前缀

2. 验证Gradle资源复制

执行以下命令确保资源被正确复制到构建目录:

./gradlew processResources

然后检查build/resources/main/it/uni/cs/name/progettofinaledatemplate/下是否存在你的资源文件,如果不存在,需要检查资源文件名是否大小写正确(Java类路径区分大小写)

3. 移除多余的Gradle配置

Gradle默认已经将src/main/resources作为主资源目录,你添加的sourceSets配置是多余的,建议删除:

// 删掉这段不必要的配置
sourceSets {
    main {
        resources {
            srcDir 'src/main/resources'
        }
    }
}

多余的配置可能导致资源复制逻辑冲突

验证修复

执行以下命令重新运行项目:

./gradlew clean run

内容的提问来源于stack exchange,提问作者Luca Porfiri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:23:14