为什么在类加载器中搜索类有时候不起作用?

时间:2014-10-08 11:36:29

标签: java classloader

我的团队正在开发一些资源,这些资源将在某些Web项目中作为jar部署。在jar中有一个类可以找到一些使用反射加载并放入映射的客户端类,但是我们在测试期间遇到了一个奇怪的问题,因为在某些客户端中,检索这些类的方法只返回一个空列表!

所以,我们有3个客户端(计算在开发中使用的站点),其中2个工作正常,但其中一个没有。奇怪的是在开发站中它在客户端工作得很好但是当我试图用JUNit测试它时,我的意思是,从组件内部扫描类本身我们有同样的问题,一个空列表。

以下是有时可行的代码,如何改进以便始终有效?

public final static List<Class<?>> find(final String scannedPackage) {
    final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    final String scannedPath = scannedPackage.replace(DOT, SLASH);
    final Enumeration<URL> resources;
    try {
        resources = classLoader.getResources(scannedPath);
    } catch (IOException e) {
        throw new IllegalArgumentException(String.format(BAD_PACKAGE_ERROR, scannedPath, scannedPackage), e);
    }
    final List<Class<?>> classes = new LinkedList<Class<?>>();
    while (resources.hasMoreElements()) {
        final File file = new File(resources.nextElement().getFile());
        classes.addAll(find(file, scannedPackage));
    }
    return classes;
}

0 个答案:

没有答案