java - getResourcesAsStream 无法从 jUnit 加载文件

标签 java gradle jar

这个问题在这里已经有了答案:





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/

相关文章:

java - 验证内部类的实例

java - 多模块项目,gradle 和 bintray

java - 如何自动将所有相关类收集到一个jar中(使用maven)?

android - 如何忽略Android build.gradle中的隐藏目录

gradle - 如何将 junit 测试套件结果汇总到由 gradle 运行的单个报告中?

java - 如何通过双击启动 cli Jar?

java - 如何为 Maven 安装的 jar 编写 POM 文件?

java - 以表格格式打印对象的 ArrayList

Java 属性文件验证

java - 如何使用elasticsearch-test将多个json记录加载到elasticsearch中