java:在一个webapp中使用同一个lib的两个版本

我遇到了以下问题:我的webapp中有一个模块需要jaxb 1.x而另一个模块需要jaxb 2.x. 第一个模块不适用于新版本的jaxb,反之亦然。 我怎样才能在一个项目中使用这两个jar子? 谢谢。

如果您正在使用JAXB参考实现,那么您可以通过包含jaxb1-impl.jarJAXB 1模型与JAXB 2运行时一起使用

对于常规应用程序,通常非常不同的版本使用不同的包名称。 如果是这种情况,您可以立即使用它们而不会出现问题。 但是,如果它们相同,则可以使用jarjar重命名包。

但是,由于您使用的是Web容器,因此每个应用程序都应使用您部署的版本而不是其他版本。 即网络容器为您服务。

OSGi是另一个容器,可以更明确地管理版本,并让您更好地控制这些问题(但我相信您只需要它)

你有一个jar-hell问题。 一般来说,在普通的java环境中,解决这个问题是不可能的。 您必须使用OSGI强制模块化到您的项目中。 起点: http : //www.osgi.org/About/HowOSGi

正如萨满所说,解决这个问题是不可能的。

让我们看看:servlet容器JRE只有一个类加载器,这个类加载器可以从jaxb或另一个加载和使用一个类,但不是两个都会给你一个classdefnotfoundexception或类似的东西。

您无法直接解决此问题:您可以获取代码(是开源)并将一个包更改为另一个名称,以便类加载器可以同时使用这两个名称。 我不推荐你这个解决方案,是一个糟糕的解决方案。

更好的是您迁移代码以使用最现代的API(jaxb 2)