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

use*_*174 3 java reflection jar invoke

我想收到结果动态调用另一个jar中的类.

例如,

名为A.jar的文件中的"A"目录.

名为B.jar的文件中的"B"目录.

我想动态调用一个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.

}}
Run Code Online (Sandbox Code Playgroud)

消息类(A.jar)

public class message{
    public String getMessage(){ 

       return "Hello!";
    }
}
Run Code Online (Sandbox Code Playgroud)

And*_*ter 6

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

Class<?> clazz = Class.forName("message");
Object messageObj = clazz.newInstance();
Run Code Online (Sandbox Code Playgroud)

这假定.jar包含message该类的文件classpath位于Java运行库上,以便Java运行库能够找到它.否则,您需要通过类加载器手动加载jar文件,例如,如何在运行时动态加载Jars?.假设您的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);
Run Code Online (Sandbox Code Playgroud)

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

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

Method getMessage = clazz.getMethod("getMessage");
String result = (String) getMessage.invoke(messageObj);
Run Code Online (Sandbox Code Playgroud)