是否可以将jar / package添加到类路径,然后在使用后将其删除? 在运行时

问题描述

背景:我的主要目标是启动一个线程,为其设置一个类路径,然后在线程死后,我不希望该线程保留任何内容。是否可以在线程执行后重置类加载器,以使之后添加的URL包不再持久?

我一直在单独的线程中运行以下代码

    public static void addURL(URL url) throws Exception {
        urlclassloader classLoader
        = (urlclassloader) Thread.currentThread().getContextClassLoader();
        Class clazz= urlclassloader.class;

        // Use reflection
        Method method= clazz.getDeclaredMethod("addURL",new Class[] { URL.class });
        method.setAccessible(true);
        method.invoke(classLoader,new Object[] { url });
    }

然后为添加的类运行一个名字:

try {
    Class.forName("com.mypackage.myclass",false,Thread.currentThread().getContextClassLoader());
} catch (ClassNotFoundException e) {
    e.printstacktrace();
}

但是,在线程退出之后,如果我重新运行上面的forName(),我期望在线程之外有一个classnotfoundexception,但是它不会出错。有没有办法从父线程的上下文类加载器中删除程序包?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)