【问题标题】:Using the same libraries of different versions使用不同版本的相同库
【发布时间】:2012-01-16 22:00:49
【问题描述】:

我有 2 个库:owls.jarenvy.jar。它们依赖于 lib jena.jar,但有两个不同的、不可兼容的版本。羡慕使用旧版本 - jena.jar,owls new - jena2.jar 我想在 glassfish-3.0.1 上运行的 Web 应用程序中同时使用它们。我正在使用 IDEA 11 来部署我的网络应用程序。

我有这样的目录树:

  • webapp/web-inf/lib/envy.jar
  • webapp/web-inf/lib/owls.jar
  • webapp/lib/envy/jena.jar
  • webapp/lib/owls/jena2.jar

我在 ma​​nifest.mf 中添加 envy 和 owls 库的类路径,如下所示:../../lib/envy/jena.jar

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

加载类

有什么方法可以同时使用这两个库吗?

【问题讨论】:

    标签: glassfish dependencies classpath


    【解决方案1】:

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

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

    【讨论】:

    • 你能举个例子吗?我只知道如何加载类然后使用反射访问它们,但我不知道如何为某些 3dparty 库加载类。我知道如何加载 owls 类,但是如何为 owls lib 加载 jena2 类?
    • 不幸的是,我需要使用新版本的 jena 库。而且我还需要另一个使用旧版本 jena 的库,并且不会有进一步的更新。所以据我了解有没有办法做到这一点?或者我可以使用我自己的类加载器?如果是,那么您可能知道我能读到什么(如何为 3dparty 库加载类)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 2016-06-03
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    相关资源
    最近更新 更多