我正在编写一个插件,用于将我的代码加载为子类加载器
问题是该框架使用了某个Xerces版本,与我的代码不兼容,我想用我的“自己的”jar用于xerces,但似乎既然旧的已经加载了,我就不能似乎让我的代码使用我的。
我正在寻找一些类加载器分离,我知道这是一个已知的问题,但似乎无法解决它
在这种情况下,是否有任何框架,库或代码示例在本地用户使用较新的jar?
答案 0 :(得分:1)
您是否尝试将框架类和Xerces库作为ExtClassLoader的一部分加载,并将它们放在与java.ext.dirs系统属性相对应的路径中?这样,框架的Xerces实现版本将由ExtClassLoader加载。
然后,您可以将Xerces实现的版本放在与要由AppClassLoader加载的java.class.path系统属性相对应的路径中。
我自己没有尝试过,但考虑到类加载层次结构,这应该有效。您可以在此处详细了解类加载层次结构 - http://onjava.com/pub/a/onjava/2005/01/26/classloading.html
答案 1 :(得分:0)
尝试做:
ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(childClassLoader);
try{
// do xml parsing
}finally{
Thread.currentThread().setContextClassLoader(oldContextClassLoader);
}