【问题标题】:getResourcesAsStream can't load file from jUnit [duplicate]getResourcesAsStream 无法从 jUnit 加载文件 [重复]
【发布时间】:2016-07-21 12:51:48
【问题描述】:

我已经不知所措,试图弄清楚为什么我无法从 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 的 gui 运行 JUnit。配置为使用模块的classpath。(项目中有多个模块;上面的源码树就是其中一个模块)

标签: java gradle jar


【解决方案1】:

在不确切知道 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$/.."

... 这似乎起到了作用。不要问我。

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2015-08-20
    • 2016-01-24
    • 1970-01-01
    • 2019-02-04
    • 2015-10-26
    相关资源
    最近更新 更多