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

时间:2016-01-11 13:09:27

标签: 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.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

正在测试的Parser获取一个目录,并且知道要查看data/testData.txt。这里的测试类运行解析器,为其提供有效数据,无效数据和缺失数据,以检查解析器是否正确处理每种情况。有效和无效数据工作正常,但MISSING URL为空。如果我在a.txt中放置了不同的文件(例如test-data-MISSING),则URL已正确初始化,但目录中没有任何文件,则为空。这是类加载器的特点吗?有没有解决方法,即正确地MISSING_DIR URL初始化,即使其子目录中没有任何内容?

谢谢!

1 个答案:

答案 0 :(得分:0)

Boris强调说这是一个Maven问题,而不是任何与Java有关的问题。复制资源时,需要将maven-resources-plugin配置为包含空目录。在pom:

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