【发布时间】:2012-07-30 08:36:59
【问题描述】:
我已经阅读了很多关于 Java 类加载器的内容,但到目前为止,我还没有为这个简单的问题找到答案:
我在 v1.jar 和 v2.jar 罐子中有两个版本的 com.abc.Hello.class。我想在我的应用程序中使用两者。最简单的方法是什么?
我没想到会这么简单,但类似这样的东西会很棒:
Classloader myClassLoader = [magic that includes v1.jar and ignores v2.jar]
Hello hello = myclassLoader.load[com.abc.Hello]
在不同的班级:
Classloader myClassLoader = [magic that includes v2.jar and ignores v1.jar]
Hello hello = myclassLoader.load[com.abc.Hello]
我想避免使用 OSGi。
【问题讨论】:
-
就我个人而言,我不认为我会想要这样的魔法,因为它会导致维护/调试的噩梦......你能详细说明你为什么需要这个吗?
-
多个插件依赖于同一共享库的不同版本将是造成这种情况的原因。
-
@beny23 你没听说过 jar hell 吗?我刚刚又打了。 selenium 正在使用一个版本,而 google 组件使用的是不同版本的番石榴,而 selenium 失败了,所以我需要 selenium 使用它测试过的 jar,而 google 组件使用它测试过的不同版本。
标签: java class jvm classloader