如何调用另一个Jar文件的Java类?

时间:2015-12-10 08:41:36

标签: java reflection jar invoke

我想在另一个jar中动态调用一个类。

例如,

' A'名为A.jar。

的文件中的目录

' B'名为B.jar的文件中的目录。

我想动态地将一类A.jar文件调用到B.jar文件。

这是A.jar文件的主要类。

因为消息交换技术而不考虑套接字和RMI。

主类(B.jar)

public class main {
public static void main(String[] args) {
    //It dynamically creates an object of a Message Class in A.jar.
    //And it invoke the getMessage function.
    //And Save the return value.

}}

邮件类(A.jar)

public class message{
    public String getMessage(){ 

       return "Hello!";
    }
}

1 个答案:

答案 0 :(得分:6)

首先,您需要动态创建给定类的实例:

Class<?> clazz = Class.forName("message");
Object messageObj = clazz.newInstance();

这假定包含.jar类的message文件位于classpath上,以便Java运行时能够找到它。否则,您需要通过类加载器手动加载jar文件,例如就像How should I load Jars dynamically at runtime?一样。假设包含A.jar类的message文件位于c:\temp\A.jar,您可以使用类似

的内容
URLClassLoader child = new URLClassLoader (
        new URL[] {new URL("file:///c:/temp/A.jar")}, main.class.getClassLoader());
Class<?> clazz = Class.forName("message", true, child);

加载jar文件并从中加载消息类。

在这两种情况下,您都可以从类中检索该方法并在创建的实例上调用它:

Method getMessage = clazz.getMethod("getMessage");
String result = (String) getMessage.invoke(messageObj);