让我们有一个Groovy / Java应用程序,它应该使用一组在外部*.jar
中定义的类 - 文件(假设它们位于主可执行jar附近)。
因此,主类(我们称之为Main
)应该在运行时加载plugin.jar
文件,并在该类中调用一些实例方法,在该jar中定义(对于某些约定,假设该类将jar命名为jar - Plugin
。
Main
类在运行之前无法知道它有哪些插件。让我们抛弃CLASSPATH
和java -jar
运行参数,只使用代码进行魔术。
那么,如何才能完成这个以及如何创建plugin.jar
(在我的情况下使用Eclipse)才能正确加载?
PS:是的,我确实将我的groovy源代码编译成jar文件。但我需要执行类加载并在运行中完全调用。
答案 0 :(得分:2)
秘密很简单!
使用URLClassLoader
可以解决问题。
所以, Groovy 代码:
ClassLoader loader = new URLClassLoader((URL[]) [
new File("C:\\Users\\errorist\\workspace\\javatest1\\bin\\").toURI().toURL()
])
Class c = loader.loadClass("src.SomeClass1")
c.invokeMethod("main", (String[]) ["Hello", "World"])
Java 一:
File file = new File("C:\\Users\\errorist\\workspace\\javatest1\\bin\\");
URL[] urls = new URL[] { file.toURI().toURL() };
ClassLoader loader = new URLClassLoader(urls);
Class c = loader.loadClass("src.SomeClass1");
c.invokeMethod("main", new String[] { "Hello", "World!" });
答案 1 :(得分:1)