Java 如果目录为空,为什么作为类路径资源引用的目录为空?

Java 如果目录为空,为什么作为类路径资源引用的目录为空?,java,maven,Java,Maven,我有以下单元测试类,它引用了一些测试数据文件作为类路径资源: package com.altanqa.project.parser; public class ParserTest { private static final URL VALID_DIR = ParserTest.class.getResource("testData-VALID"); private static final URL INVALID_DIR = ParserTest.class.getReso

我有以下单元测试类,它引用了一些测试数据文件作为类路径资源:

package com.altanqa.project.parser;

public class ParserTest {
    private static final URL VALID_DIR = ParserTest.class.getResource("testData-VALID");
    private static final URL INVALID_DIR = ParserTest.class.getResource("testData-INVALID");
    private static final URL MISSING_DIR = ParserTest.class.getResource("testData-MISSING");
    // ...
}
此处引用的目录结构如下所示:

src/test/java/com/altanqa/project/parser
    ParserTest.java
src/test/resources/com/altanqa/project/parser
    testData-VALID
        data
            test-data.txt
    testData-INVALID
        data
            test-data.txt
    testData-MISSING
        data
被测试的解析器获取一个目录,并知道在其中查找
data/testData.txt
。这里的测试类运行解析器,为其提供有效数据、无效数据和缺失数据,以检查解析器是否正确处理每种情况。有效和无效数据都可以正常工作,但
缺少的
URL为空。如果我将不同的文件(例如,
a.txt
)放入
测试数据缺失
,则URL已正确初始化,但目录中没有任何文件,则为空。这是类装入器的一个特性吗?有没有办法解决这个问题,即让
MISSING_DIR
URL正确初始化,即使子目录中没有任何内容


谢谢大家!

这要归功于Boris,他强调这是Maven的问题,而不是Java的任何问题。
maven资源插件
需要配置为在复制资源时包含空目录。在pom中:

<build>
  <plugins>
    <plugin>
      <artifactId>maven-resources-plugin</artifactId>
      ...
      <configuration>
        <includeEmptyDirs>true</includeEmptyDirs>
      </configuration>
      ...
    </plugin>
  </plugins>
</build>

maven资源插件
...
真的
...

鲍里斯强调这是一个Maven问题,而不是Java的任何问题,这一点值得赞扬。
maven资源插件
需要配置为在复制资源时包含空目录。在pom中:

<build>
  <plugins>
    <plugin>
      <artifactId>maven-resources-plugin</artifactId>
      ...
      <configuration>
        <includeEmptyDirs>true</includeEmptyDirs>
      </configuration>
      ...
    </plugin>
  </plugins>
</build>

maven资源插件
...
真的
...

检查Maven或您的IDE是否已将
testData MISSING/data
复制到
target/test类
out/test类
,这将是问题所在。。。你说得对,现在还没有被复制。非常感谢。检查Maven或您的IDE是否已将
testData MISSING/data
复制到
target/test class
out/test class
,这将是问题所在。。。你说得对,现在还没有被复制。非常感谢。