使用相同的不同版本的库

时间:2012-01-16 12:55:34

标签: glassfish dependencies classpath

我有2个库: owls.jar envy.jar 。它们依赖于lib jena.jar ,但是两个不同的,不可编译的版本。羡慕使用旧版本 - jena.jar ,猫头鹰新 - jena2.jar 我想在 glassfish-3.0.1 上运行的Web应用程序中使用它们。我使用 IDEA 11 来部署我的网络应用。

我有这样的目录树:

  • web应用/ WEB-INF / LIB / envy.jar
  • web应用/ WEB-INF / LIB / owls.jar
  • web应用程序/ LIB /羡慕/ jena.jar
  • web应用程序/ LIB /猫头鹰/ jena2.jar

我添加到 manifest.mf 的嫉妒和猫头鹰libs类路径如下: ../../ lib / envy / jena.jar

我使用 -verbose:class 选项,我总是从 jena.jar 加载类。如果我正在使用或不使用 envy.jar ,我总是从 jena.jar 加载课程。只有当我删除 envy.jar 时才会从 jena2.jar

加载类

有没有办法同时使用这两个库?

1 个答案:

答案 0 :(得分:0)

使用同一类的2个不同版本的唯一方法是通过2个不同的类加载器来使用它们。那就是你必须用一个类加载器 owls.jar__和__jena.jar 加载 envy.jar jena2.jar 。这个解决方案有其自身的缺陷,您可能应该使用自定义代码,以便在必要时使用另一个类加载器,也许您最终会编写自己的类加载器。

据我所知,这种情况没有内置的解决方案。可能是,使用上面的jar的旧版本更容易,可以支持相同版本的 jena.jar 这是更容易的解决方案。