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

IntelliJ中Gradle构建库被非Gradle应用引用时资源加载失败求助

解决Gradle构建库在IntelliJ中资源加载失败的问题

问题原因

你当前用this.getClass().getResource("sample.properties")加载资源时,这个方法会相对于当前类所在的包路径查找资源。比如你的类在mypackage下,它会去类路径的mypackage/sample.properties位置查找,但Gradle构建时把资源文件放在了类路径根目录(build/resources/main),和类文件所在的build/classes/java/main/mypackage不在同一层级,所以找不到资源。而Eclipse能正常工作是因为它默认把类和资源都输出到同一个目录,相对路径自然能匹配上。

解决方案

方案1:修改资源加载代码(推荐)

直接从类路径根目录查找资源,有两种写法:

  • 使用带斜杠的绝对路径:
    var resource = this.getClass().getResource("/sample.properties");
    
  • 使用类加载器直接查找(默认从根目录开始):
    var resource = this.getClass().getClassLoader().getResource("sample.properties");
    

方案2:调整资源文件的存放位置

把sample.properties放到和类同包的resources子目录下,比如你的类在mypackage中,就创建src/main/resources/mypackage目录,把资源文件放进去。Gradle构建时会自动将这个资源复制到build/resources/main/mypackage,和类文件所在的包路径对应,此时原有的相对路径加载代码就能正常工作。

方案3:调整Gradle配置合并类和资源输出目录(不推荐)

如果一定要保持现有资源位置和加载代码,可以在build.gradle中添加配置,让Gradle把资源文件复制到类输出目录:

tasks.withType(JavaCompile) {
    options.outputDirectory = file("$buildDir/classes/java/main")
}
processResources {
    destinationDirectory = file("$buildDir/classes/java/main")
}

不过这种方式违背了Gradle的标准构建结构,可能引发其他类路径相关问题,不建议长期使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:55:20