Java,Classpath,Classload=>同一个JAR/项目的多个版本

Java,Classpath,Classload=>同一个JAR/项目的多个版本

我知道这对有经验的程序员来说可能是个愚蠢的问题。但是我有一个库(一个http客户机),这是我的项目中使用的其他一些框架/JAR所需要的。但它们都需要不同的主要版本,如:

httpclient-v1.jar => Required by cralwer.jar
httpclient-v2.jar => Required by restapi.jar
httpclient-v3.jar => required by foobar.jar

类加载器是否有足够的智能来区分它们?很可能不是?如果一个类在所有三个JAR中是相同的,那么ClassLoader是如何处理这个问题的。哪个是装的为什么?

ClassLoader是只拾取一个JAR,还是任意混合类?例如,如果一个类是从Version1.jar加载的,那么从同一个类加载器加载的所有其他类都会进入同一个JAR?

你如何处理这个问题?

是否存在某种方法将这些罐子“合并”到“requd.jar”中,从而使“一个单元/包”被Classloader还是有某种联系?



慕田峪9158850
浏览 448回答 3
3回答

萧十郎

每个类负载准确地选择一个类。通常是第一个被发现的。OSGi目的是解决同一个JAR的多个版本的问题。春分和阿帕奇费利克斯是OSGi的常用开源实现。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java