这个问题在这里已经有了答案:
Gradle does not copy test resources to build
(2 个回答)
5年前关闭。
我已经不知所措,试图弄清楚为什么我不能从 Gradle 项目的资源文件夹中加载文件。
我的项目具有以下文件夹结构:
/src
/main
/java
/datasets
/IrisDataReader.java
/resources
/datasets
/Iris.csv
/test
/java
/resources
/datasets
/Iris.csv
在我的 test/java 目录中,我正在运行一些使用 IrisDataReader 将 Iris.csv 读入程序的测试。
以下产生空指针异常。
InputStream inputStream = IrisDataReader.class.getResourceAsStream("/datasets/Iris.csv");
构建后,Gradle 会创建以下文件结构
/build
/classes
/main
/datasets
/IrisDataReader.class
/resources
/main
/datasets
/Iris.csv
这是奇怪的部分:
如果我将 build/resources/main/datasets/Iris.csv 复制到/build/classes/main/datasets/,则类加载器可以成功加载文件。有任何想法吗?
我没有更改任何 gradle 默认配置或添加任何构建任务。
最佳答案
在不确切知道 IntelliJ 的 .iml 文件如何工作的情况下,我注意到我的 [module].iml 文件有一个不同的模块声明为 external.root.project.path。
当我找到它时,它看起来像:
external.root.project.path="$MODULE_DIR$/../anothermodule"
...所以我将其更改为:
external.root.project.path="$MODULE_DIR$"
当我清理并重建项目时,IntelliJ 自动对其进行了编辑,使其看起来像这样:
external.root.project.path="$MODULE_DIR$/.."
......这似乎完成了这项工作。不要问我。
关于java - getResourcesAsStream 无法从 jUnit 加载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38494101/