maven项目中的Classloader.getResources()返回一个空的枚举

时间:2011-12-30 19:25:02

标签: java maven classloader

我有一些代码可以获得如下资源:

public static final String CONVERTER_FILE = "META-INF/jumbo-converters";
static {
        ClassLoader ldr = Thread.currentThread().getContextClassLoader();
        Enumeration<URL> e = ldr.getResources(CONVERTER_FILE);

但是当我在JUnit测试(Java 6)中运行它时,枚举为空。项目中有许多子项目有以下文件:

myProject/mySubProject/src/main/resources/META-INF/jumbo-converters

我相信它在过去一直有效。 getResources做了什么?以及如何调试当前的故障?

2 个答案:

答案 0 :(得分:2)

要使用ClassLoader.getResources()加载文件,必须在类路径中找到它。解决方案是确保META-INF的父文件夹位于类路径中。

答案 1 :(得分:1)

除非聚合项目依赖于模块,否则模块(子项目)的资源不会添加到聚合项目的类路径中。作为项目的模块不会在任何一个方向上建立依赖关系。

在上面的例子中,您应该将mySubProject的依赖项添加到myProject。因此,使myProject依赖于mySubProject。