通过java在运行时加载两个不同版本的jar

时间:2016-03-03 15:49:34

标签: java classloader

我正在开发一个项目,其中几乎没有使用POI 2.5版本罐的功能,我开发了一项新功能,我需要POI版本3.10罐,所以现在问题是以前的功能不能正常工作,因为它在poi 2.5版jar上完美运作

现在如果我在我的类路径中保留poi jar的两个版本是有任何方式,只有我的类我可以明确地调用poi 3.10版本和前一个功能poi 2.5版本被称为

默认情况下,如果我保留两个版本的poi jar,那么总是调用poi 2.5版本的jar,所以我想要我的班级说abc明确poi 3.10版本被称为

请告知我可以在这里明确使用类加载器吗?请告知我是否可以动态创建类的对象

class ABC 
{

//version of poi 3.10 being called here 
HSSFWorkbook workbookXls = new HSSFWorkbook();

}

正在使用早期版本的POI 2.5的类def

class DEF
{

//version of poi 2.5 being called here 
HSSFWorkbook workbookXls = new HSSFWorkbook();

}

1 个答案:

答案 0 :(得分:1)

是的,可以这样做,从不同的类加载器加载每个jar。

  1. 将两个罐子从当前的类路径中移出
  2. 为每个jar创建一个URLClassLoader,将您的实际类加载器作为父
  3. 使用反射来处理POI
  4. 您还可以重构一个罐子以更改其包装并避免碰撞。如果你正在使用带有jar-jar MOJO的maven,那么这可以自动完成。