JAR插件实现

时间:2011-12-17 17:14:27

标签: java reflection plugins groovy jar

让我们有一个Groovy / Java应用程序,它应该使用一组在外部*.jar中定义的类 - 文件(假设它们位于主可执行jar附近)。

因此,主类(我们称之为Main)应该在运行时加载plugin.jar文件,并在该类中调用一些实例方法,在该jar中定义(对于某些约定,假设该类将jar命名为jar - Plugin

Main类在运行之前无法知道它有哪些插件。让我们抛弃CLASSPATHjava -jar运行参数,只使用代码进行魔术。

那么,如何才能完成这个以及如何创建plugin.jar(在我的情况下使用Eclipse)才能正确加载?

PS:是的,我确实将我的groovy源代码编译成jar文件。但我需要执行类加载并在运行中完全调用。

2 个答案:

答案 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)

OSGi框架支持动态加载插件。有多个实现,包括Equinox,它支持Eclipse本身。