【发布时间】:2016-03-03 15:49:33
【问题描述】:
我正在开发一个项目,其中使用 POI 2.5 版本 jar 的功能很少,我已经开发了一个新功能,我需要 POI 3.10 版本的 jar,所以现在的问题是以前的功能无法正常工作在 poi 2.5 版本的 jar 上完美运行
现在,如果我将两个版本的 poi jar 都保留在我的类路径中,是否有任何方法可以仅针对我的类我可以显式调用 poi 3.10 版本,而对于以前的功能 poi 2.5 版本被调用
默认情况下,如果我保留 poi jar 的两个版本,那么调用总是在 poi 2.5 版本的 jar 中进行,所以我想为我的班级说 class abc 明确地调用 poi 3.10 版本
请告知我可以在这里明确使用类加载器吗,还请告知是否可以动态创建类的对象
class ABC
{
//version of poi 3.10 being called here
HSSFWorkbook workbookXls = new HSSFWorkbook();
}
class def 正在使用 POI 2.5 的早期版本
class DEF
{
//version of poi 2.5 being called here
HSSFWorkbook workbookXls = new HSSFWorkbook();
}
【问题讨论】:
-
这不容易。例如,它可以通过 OSGi 来完成,但这并不简单。修改代码使其只需要一个版本的 POI 而不是同时需要两个版本可能会更容易。
-
请告知在java中没有任何办法那么..
-
还请告知如何通过 OSGI 实现
-
您绝对可以使用separate classloaders 来完成,但这不是一种非常干净的方式,您可能会遇到一些意想不到的问题。 (特别是关于类加载器层次结构以及谁首先加载一个类。)
标签: java classloader