Java程序使用JAR文件中的类

时间:2011-01-10 14:52:23

标签: java jar

我会尽力说出这句话。我有一个类似API的程序 - 它使用反射来动态调用类中的方法。在这种情况下:

Server.java

public static void main(String[] args) {
    Class<?> clazz = Class.forName("DiHandler");
    StHandler out = (StHandler) clazz.newInstance();
    out.read();
}

DiHandler.java

// implements StHandler
import edu.ds.*;

public void read() {
    Ds aType = new Ds();
    aType = "134";
}

所以DiHandler有一个方法read()可以包含任何东西,在编译时它与Server.java无关。

我的问题是:DiHandler.java使用JAR文件中的类Ds。当我在Eclipse中处理DiHandler.java时(在与项目Server.java相关的单独项目中),我可以毫无问题地添加这个JAR。但是当我将DiHandler.class移动到编译后,由Server.class使用时,它怎么还能使用JAR文件呢?

我希望这是有道理的,我想用另一种方式来表达它是如何允许DiHandler在不编辑类路径的情况下从JAR调用类?

非常感谢,并且对于任何混乱或措辞不当感到抱歉,我只能提供感谢以及提供一品脱的任何帮助。

中号

2 个答案:

答案 0 :(得分:2)

无论如何,您需要让加载DiHandler的ClassLoader知道如何加载Ds类。最简单的方法是通过类路径。

另一种方法是提供您自己的ClassLoader,用于加载DiHandler,该ClassLoader知道如何加载Ds。这可以是URLClassLoader的子类,允许您即时向JAR文件添加URL。在实践中它会是什么样子我不能说因为我不知道你的背景细节。

答案 1 :(得分:0)

如果JVM可以访问它,则只能使用类。这意味着该类必须位于JVM的类路径中。

有很多方法可以将jar放在程序的类路径中。也许,如果你描述你工作的环境和面临的限制,有人将能够帮助你找到将依赖jar放在类路径上的正确机制。