2012-01-16 173 views
0

我有2个库:owls.jarenvy.jar。他们取决于lib jena.jar但两个不同的,不可修改的版本。使用旧版本的羡慕 - jena.jar,猫头鹰新 - jena2.jar 我想在Web应用程序togever使用它们与GlassFish 3.0.1运行。我正在使用想法11部署我的网络应用程序。使用不同版本的相同库

我的目录树是这样的:

  • 的webapp/WEB-INF/lib目录/ envy.jar
  • 的webapp/WEB-INF/lib目录/ owls.jar
  • 的webapp/lib中/羡慕/jena.jar
  • 的webapp/lib目录/猫头鹰/ jena2.jar

我加入到MANIFEST.MF羡慕的和猫头鹰这样的库类路径:../../lib/envy/jena.jar

我用-verbose:类选项,我总是从jena.jar。如果我真的得到加载的类使用或不使用envy.jar所有,我总是从jena.jar得到加载类。只有当我从jena2.jar删除envy.jar然后类负载

的是,有什么办法可以同时使用这个库的?

回答

0

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

据我所知,目前还没有针对这种情况的解决方案。可能是,使用老版本的上述罐子更容易,可以支持相同版本的jena.jar这是更容易的解决方案。

+0

可能你可以举一些例子吗?我只知道如何加载类,然后使用反射来访问它们,但我不知道如何为某个3dparty库加载类。我知道如何加载**猫头鹰**类,但我怎样才能加载** jena2 **类的猫头鹰**库? – kornero 2012-01-16 14:05:10

+0

不幸的是,我需要使用图书馆,使用** jena **的新版本。而且我还需要另一个使用旧版本** jena **的lib,并且不会再有更新。据我了解,没有办法做到这一点?或者我可以用我自己的类加载器做?如果是的话,那么你可能会知道一些我可以读的关于它的内容(如何为3dparty库加载类)? – kornero 2012-01-16 14:13:58