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
相关产品推荐
相关产品推荐

