首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从目录加载类。使用jars,而当jars解压/解包时,可以加载类

无法从目录加载类。使用jars,而当jars解压/解包时,可以加载类
EN

Stack Overflow用户
提问于 2011-09-20 14:08:16
回答 1查看 165关注 0票数 0

社区!如果你能帮我解决我的问题,那就太好了。

我有一个自定义的类加载器,它将是java.system.class.loader的-它保存了查找类的urls。如下所示:

代码语言:javascript
复制
public class TestSystemClassLoader extends URLClassLoader {

    public TestSystemClassLoader(ClassLoader parent) {
    super(classpath(), parent);
    }

    private static URL[] classpath() {
    try {
        // I got junit-4.8.2.jar under this url.
        URL url = new File("D:\\Work\\lib\\junit-4\\").toURI().toURL();
        return new URL[] { url };
    }
    catch (MalformedURLException e) {
        throw new IllegalArgumentException(e);
    }
    }
}

然后,我使用-Djava.system.class.loader=TestSystemClassLoader eg.TestMain运行java(JDK6),其中eg.TestMain‘main:

代码语言:javascript
复制
public static void main(String[] args) throws Exception {
    // here I got system CL which is what I want.
ClassLoader cl = Thread.currentThread().getContextClassLoader();
    // here I got: "Exception in thread "main" java.lang.ClassNotFoundException: org.junit.runners.JUnit4"
Class<?> clazz = Class.forName("org.junit.runners.JUnit4", true, cl);
}

让我抓狂的是,如果我解压/解压/解压junit-4.8.2.jar -那么eg.TestMain就可以工作了!

问题是-如何告诉java(JDK6)我希望整个目录都在类路径中,即该目录中的任何文件。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-03 02:53:26

找到所有的jars并添加它们:

代码语言:javascript
复制
private static URL[] classpath() {
    try {
        File file = new File("D:\\Work\\lib\\junit-4\\");
        List<URL> urls = new ArrayList<URL>();
        for (File f : file.listFiles()) {
            if (f.isFile() && f.getName().endsWith(".jar")) {
                urls.add(f.toURI().toURL());
            }
        }

        return urls.toArray(new URL[0]);
    }
    catch (MalformedURLException e) {
        throw new IllegalArgumentException(e);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7480844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档