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

Gradle项目中Groovy脚本无法读取resources目录文件的问题排查

问题原因与解决方法

核心问题:相对路径的基准目录不匹配

你用new File('src/main/resources/input/myInput.txt')时,文件路径是相对于当前运行脚本的工作目录,而非脚本文件所在的目录。常见错误场景是:

  • 直接在src/main/groovy目录下运行脚本(比如执行groovy YourScript.groovy),此时工作目录是src/main/groovy,实际会去寻找src/main/groovy/src/main/resources/input/myInput.txt,自然找不到文件。

两种解决方式

方式1:修正运行脚本的工作目录

切换到项目根目录,再执行脚本:

cd /path/to/your/gradle-project
groovy src/main/groovy/YourScript.groovy

这种方式能让相对路径正确指向项目根目录下的资源文件。

方式2:通过类加载器加载资源(推荐)

Gradle项目中src/main/resources下的文件会被自动加入类路径,用类加载器读取资源更可靠,还能兼容项目打包后的场景(比如jar包内的资源无法用File类直接访问)。修改后的代码:

def food = [:]
currentFood = 0
currentElf = 0

// 从类路径读取资源输入流
def inputStream = this.getClass().classLoader.getResourceAsStream('input/myInput.txt')
inputStream.eachLine { line ->
    if (line.isBlank()) {
        food[currentElf++] = currentFood
        currentFood = 0
    } else {
        currentFood += line.toInteger()
    }
}
inputStream.close()

额外检查(如果是Gradle任务执行脚本)

如果是在build.gradle中定义Groovy任务执行这段逻辑,确保sourceSets配置正确(默认Groovy项目已包含):

sourceSets {
    main {
        groovy { srcDirs = ['src/main/groovy'] }
        resources { srcDirs = ['src/main/resources'] }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:20:27