使用src/test/resources作为GradleJava的目录

使用src/test/resources作为GradleJava的目录,java,gradle,intellij-idea,Java,Gradle,Intellij Idea,我有两个包含java代码和资源的工作目录,一个用于测试,另一个用于生产 src/main/java src/main/resources src/test/java src/测试/资源 运行我的代码并从FileInputStream读取文件时,如下所示: new FileInputStream("./someFile.json"); 只要文件位于项目的根目录中,就可以正常工作。如果我将文件放在资源文件夹中并直接指向它,它也可以工作,如下所示: new FileInputSt

我有两个包含java代码和资源的工作目录,一个用于测试,另一个用于生产

src/main/java
src/main/resources

src/test/java
src/测试/资源

运行我的代码并从FileInputStream读取文件时,如下所示:

new FileInputStream("./someFile.json");
只要文件位于项目的根目录中,就可以正常工作。如果我将文件放在资源文件夹中并直接指向它,它也可以工作,如下所示:

new FileInputStream("./someFile.json");
newfileinputstream(“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']
        }
    }
}

如果您使用
java
应用程序
插件,因为您似乎正在构建一个命令行应用程序,那么一切都将立即为您设置:

plugins {
    id 'application'
}
您可以删除所有
sourceSet
配置,然后像这样加载文件:

new FileInputStream("/someFile.json");
(请注意,我编写了
/
而不是
/
,这将含义从“查找当前目录中的项目根”更改为“查找类路径资源的根”。

按照Slaw在问题下的评论并通过找到文件会更好,但这超出了您的问题范围。

如果您使用
java
或者,因为您似乎正在构建一个命令行应用程序,
应用程序
插件,那么一切都将立即为您设置:

plugins {
    id 'application'
}
您可以删除所有
sourceSet
配置,然后像这样加载文件:

new FileInputStream("/someFile.json");
(请注意,我编写了
/
而不是
/
,这将含义从“查找当前目录中的项目根”更改为“查找类路径资源的根”。

按照Slaw在问题下的评论并通过找到文件会更好,但这超出了您的问题。

不要像访问文件一样访问资源。如果需要打开资源的
InputStream
,请使用。注意Gradle源目录是classpath/modulepath的“根”(因此不包括在资源名称中)。是的,您误解了它。我只是试图从测试代码而不是生产代码中访问测试资源文件夹。这很好:)不过,我的第一条评论仍然适用。为了更清楚,更新了我的问题。我只希望能够通过gradle访问正确的资源目录。可能与源代码集有关。您使用的构建工具与此无关(Gradle已经在
src/test/resources
下正确地处理了
java
插件中的资源)。通过
类#getResourceAsStream(String)
和相关API访问资源。不要尝试使用
FileInputStream
读取资源。不要像访问文件一样访问资源。如果需要打开资源的
InputStream
,请使用。注意Gradle源目录是classpath/modulepath的“根”(因此不包括在资源名称中)。是的,您误解了它。我只是试图从测试代码而不是生产代码中访问测试资源文件夹。这很好:)不过,我的第一条评论仍然适用。为了更清楚,更新了我的问题。我只希望能够通过gradle访问正确的资源目录。可能与源代码集有关。您使用的构建工具与此无关(Gradle已经在
src/test/resources
下正确地处理了
java
插件中的资源)。通过
类#getResourceAsStream(String)
和相关API访问资源。不要试图使用
FileInputStream
阅读参考资料。“但这有点超出了你的问题”——我不同意。决不能使用
FileInputStream
读取资源。资源不一定是文件,这意味着假设它们是文件是错误的(例如,一旦打包到JAR文件中,它们就是JAR文件中的条目,而不是文件本身)。向资源打开
输入流
的正确方法是通过
类#getResourceAsStream(String)
(或相关API)。除了将资源放在正确的源目录中(在本例中为
src/test/resources
),正在使用的构建工具是无关的!这就是我再次提到它的原因。当使用
类#getResourceAsStream(String)
时,我得到一个找不到JSON输入的错误。这可能有帮助吗?它有一个Jon Skeet的答案!“但这有点超出了你的问题范围”——我不同意。决不能使用
FileInputStream
读取资源。资源不一定是文件,这意味着假设它们是文件是错误的(例如,一旦打包到JAR文件中,它们就是JAR文件中的条目,而不是文件本身)。向资源打开
输入流
的正确方法是通过
类#getResourceAsStream(String)
(或相关API)。除了将资源放在正确的源目录中(在本例中为
src/test/resources
),正在使用的构建工具是无关的!这就是我再次提到它的原因。当使用
类#getResourceAsStream(String)
时,我得到一个找不到JSON输入的错误。这可能有帮助吗?它有一个Jon Skeet的答案!