如何在Java中加载模块

时间:2010-05-16 23:07:16

标签: java jar module

我正在构建一个加载模块的服务器。每个模块都是.jar文件。在jar中,有模块需要的所有类。服务器需要读取jar,找到主类(它没有主要方法就是使模块工作但不作为不同程序的类),构建该类的对象并将其存储在向量中模块,以便它可以访问特定模块,具体取决于要完成的工作。

我该怎么做?

就服务器而言,它是侦听和接收请求,但是没有模块可以委托作业,因为我的模块向量是空的。

3 个答案:

答案 0 :(得分:2)

来自Sun的

Here is a network class loader示例。 这应该涵盖你需要的一切。

获取原始URLClassLoader

的URL后,请尝试使用此语法

JAR网址

JAR URL的语法是:

jar:<url>!/{entry}

例如:

jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class
jar:file:/export/home/faculty/stansif/public_html/java/applets/image/view.jar!/image.gif

访问资源

final java.net.URL url = X.class.getResource ("/dir/image.png");
final ImageIcon icon = new ImageIcon (url);

另请查看此网址http://www.javaworld.com/javaworld/javatips/jw-javatip70.html

答案 1 :(得分:2)

您应该使用Java的ServiceLoader类

http://java.sun.com/javase/6/docs/api/java/util/ServiceLoader.html

这要求您的JAR在META-INF / services目录中有一个提供程序配置文件。这是用Java加载模块的标准内置方法。如果您需要更强大的模块加载,您可能需要查看OSGi。

答案 2 :(得分:1)

您应该查看现有框架,包括轻量级OSGi容器。但是,所采用的一般方法是为每个模块创建一个类加载器,并使用Reflection或通用API调用每个模块 - RunnableCallable是两个好的候选者。