使用src/test/resources作为GradleJava的目录
我有两个包含java代码和资源的工作目录,一个用于测试,另一个用于生产 src/main/java使用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
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的答案!