我想实现PriorityClassLoader,它可以执行以下操作:
ClassLoader实例作为构造函数参数。addURL方法,它的工作方式类似于URLClassLoader中的addURL,但是对于每一个新的URL,它都设置了优先级。当应该加载类时,加载程序将首先尝试使用默认的类加载器(如果不是--根据优先级从提供的URL加载该类)。有没有现成的解决方案?
PS -我最初的问题是遵循-我想添加URL到系统类装入器,但它开始失败的重复类在系统类装入器和远程JAR。
发布于 2013-12-12 14:48:37
我无意中发现了一个名为JCL的有趣的库,我这样做了:
JarClassLoader jcl = new JarClassLoader();
jcl.add(new URL("hive://" + pageURL.getHost() + ":" + pageURL.getPort() + "/" + pageURL.getApplicationName() + "/origJar.jar"));
jcl.getSystemLoader().setOrder(1);
jcl.getThreadLoader().setOrder(2);
jcl.getCurrentLoader().setOrder(3);
jcl.getParentLoader().setOrder(4);
jcl.getLocalLoader().setOrder(5);
Thread.currentThread().setContextClassLoader(jcl);发布于 2013-12-12 14:26:12
为了回答这个问题,我从未听说过任何现成的解决方案,但是可以由一些定制的类加载器来完成,这是这个博客帖子中的一个简化示例。
public class ExampleFactory {
public static IExample newInstance() {
URLClassLoader tmp =
new URLClassLoader(new URL[] {getClassPath()}) {
public Class loadClass(String name) {
if ("example.Example".equals(name))
return findClass(name);
return super.loadClass(name);
}
};
return (IExample)
tmp.loadClass("example.Example").newInstance();
}
}对于最初的问题,您是否尝试将库放在核可目录中?这是一种JDK标准机制,允许在JVM引导类加载器级别添加库。
根据您的服务器,还有其他选择来放置类。如果所有这些都没有帮助,那么最好提供更多的原始问题的信息。
https://stackoverflow.com/questions/20545812
复制相似问题