我想在另一个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!";
}
}
答案 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);