Java 需要两个用于不同类的jar文件版本

Java 需要两个用于不同类的jar文件版本,java,classloader,Java,Classloader,我已经做了很多搜索,还没有找到这个问题的答案。也许这不可能,但这是我所拥有的 A.jar依赖于SomeLibrary-V2.jar jar中的Class1(间接地)依赖于SomeLibrary-V1.jar 我想 A.jar从V2获取其类 Class1(以及它触发加载的类)根据需要从A.jar获取V1类或类 我可以在需要的时候写下自己的名字来加载Class1。然后,这个类加载器将首先搜索SomeLibrary-V1.jar(在父类加载器之前)。但是,Class1的类加载器将不会设置为my cla

我已经做了很多搜索,还没有找到这个问题的答案。也许这不可能,但这是我所拥有的

  • A.jar依赖于SomeLibrary-V2.jar
  • jar中的Class1(间接地)依赖于SomeLibrary-V1.jar
  • 我想

  • A.jar从V2获取其类
  • Class1(以及它触发加载的类)根据需要从A.jar获取V1类或类
  • 我可以在需要的时候写下自己的名字来加载Class1。然后,这个类加载器将首先搜索SomeLibrary-V1.jar(在父类加载器之前)。但是,Class1的类加载器将不会设置为my classloader,因为它将遵从父类。这就意味着,当Class1试图加载我想从SomeLibrary-V1.jar中获取的类时,将不会使用我的子类加载器

    我想我需要将我的类加载器设置为Class1类的类加载器。我已经研究过内省,将类加载器设置到我的类加载器实例,但是类对象的类加载器字段没有公开。另一种方法可能是从我的类加载器中调用definedClass(),但是我不能真正使用父类

    我已经看到了,但答案是建议编写一个类加载器,但没有提供细节。我在这里提供了一些细节,这些细节引出了该解决方案的其他问题(我希望-我没有让代表添加评论)

    我希望我只是错过了一些东西。谢谢您的帮助。

    欢迎光临!这是不容易做到的,因为类路径在Java中的工作方式过于简单

    有解决办法,但没有简单、快速的解决办法。正如您已经发现的那样,您可以使用各种类型的类装入器技巧,或者使用模块系统,例如


    希望将来当Java 9问世时,这会变得更好,它将有一个标准的模块系统。

    虽然解决方案是可能的,但任何这样的解决方案都将是一个非常脆弱的解决方案,几乎肯定会导致比其价值更多的问题。我想说的是,如果可能的话,可以避免对同一个lib的不同版本的依赖。可能会将这种依赖性视为问题的症状,并尝试解决根本原因。

    可能重复,只是为了激发问题。我正在构建RESTful服务,然后需要使用Spark添加一些功能。Spark使用Jersey 1.x,我开始使用Jersey 2.x。