java - 如何从不同的 jar 加载相同的类

标签 java jar

我在两个不同的 jar1 和 jar2 中有一个 Client.java 类 现在在运行时我想决定加载哪个 Client.class

if (country==india){
         // load Client class of jar1
) else{
        load client class from jar2 
}

我可以这样做吗...

最佳答案

如果这 2 个类具有相同的包名称,即 com.mycompany.Client,那么您最终会遇到加载哪个版本的 Client 有点随意的情况。它归结为首先在类路径上。这是一个 JAR hell 情况 http://en.wikipedia.org/wiki/Java_Classloader#JAR_hell .

这是一个很好的避免情况,但如果你绝对必须有同一个类的不同版本,有办法做到这一点。一种方法是使用自定义类加载器,类加载器将知道您需要执行哪个版本。这不是一件微不足道的事情,而且可能难以管理。 OSGi 框架是帮助管理这个的替代方案(它在后台使用自定义类加载器),但如果你只有一个类实例,我不会使用它,因为它是另一个框架,需要时间和维护。

底线:尽可能避免这种情况,如果不能则选择阻力最小的路径。

如果类确实有不同的包名,@Casidiablo 已经提供了一个很好的答案。

关于java - 如何从不同的 jar 加载相同的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2854056/

相关文章:

java - 设置 JNotify

java - 我们可以只为一部分 servlet 配置过滤器吗?

java - Android 此功能需要 ASM7

java - 将几行代码写入一行是否有益(就内存和空间复杂性而言)。这值得么?

java - 在 Objective-C 中处理 "final"参数的适当方式

java - 列出 jar 文件中的 xml 文件

scala - 使用 SBT 生成不包含 Scala 补丁版本的 JAR 文件名

java - 在 Runnable jar 文件中找不到 com.mysql.jdbc.Driver

java - JOGL 有问题( eclipse )

java - 如何在JAVA中向其他类发送状态