【发布时间】:2020-10-18 08:27:19
【问题描述】:
我有两个包含 java 代码和资源的工作目录,一个用于测试,另一个用于生产。
src/main/java
src/main/资源
src/test/java
src/test/资源
当运行我的代码并像这样从 FileInputStream 读取文件时:
new FileInputStream("./someFile.json");
只要文件位于项目的根目录中,它就可以正常工作。如果我在资源文件夹中有文件并像这样直接指向它,它也可以工作:
new FileInputStream("src/test/resources/someFile.json");
有没有办法将 gradle 中的 src/test/resources 声明为 FileInputStream 查找资源的主文件夹?
如果我把我的文件这样放,它工作正常。
但是当我像这样将文件放在 src/test/java/resources 中时
我得到一个 fileNotFoundException。
我需要一种方法来添加要使用 gradle 扫描的目录。
将此添加到 build.gradle 仍然会引发 fileNotFoundException。
sourceSets {
test {
java {
srcDirs = ['src/test/java']
}
resources {
srcDirs = ['src/test/resources']
}
}
}
【问题讨论】:
-
不要像访问文件一样访问资源。如果您需要为资源打开
InputStream,请使用Class#getResourceAsStream(String)。请注意,Gradle 源目录是类路径/模块路径的“根”(因此不包含在资源名称中)。 -
是的,您确实误解了它。我只是想从测试代码而不是生产代码访问测试资源文件夹。
-
那很好 :) 但是我的第一条评论仍然适用。
-
更新了我的问题以更清晰。我只希望能够通过 gradle 访问正确的资源目录。可能与 sourceSets 有关。
-
您使用的构建工具无关紧要(并且 Gradle 已经在
src/test/resources下正确处理资源,作为java插件的一部分开箱即用)。资源通过Class#getResourceAsStream(String)和相关API 访问。请勿尝试使用FileInputStream读取资源。
标签: java gradle intellij-idea