2011-06-16 31 views
0

我正在试图制作一个简单的应用程序,用于在运行时加载和运行一些类。举例来说,假设我有这样的配置:在单独的上下文中运行类

module1.classpath=module1.jar,somelibs1.jar 
module1.class=com.blabla.Module1 
module2.classpath=module2.jar,somelibs2.jar 
module2.class=com.blabla.Module2 

然后,我需要加载module1.classpath指定的库和运行module1.class与库加载。之后我需要加载module2.classpath并运行module2.clas与这些库。

我该如何处理somelibs1.jarsomelibs2.jar里面有相同类的情况?基本上我想运行module1.jar专门使用somelibs1.jarmodule2.jar专门使用somelibs2.jar。我如何实现?

我猜我需要为我的每个类创建一个单独的类加载器并将该类加载到类加载器中。不过,我会欣赏一些例子,或者至少确认这是一种正确的方式。

回答

1

对于OSGI,这似乎是一个相当不错的用例。我建议使用OSGI,因为你所需要的一切都是由OSGI提供的。

但是,如果由于某种原因您不能使用OSGI,那么您需要做的是为每个模块创建一个类加载器。通过ClassLoaderX载入moduleX.class,并将moduleX.classpath添加到ClassLoaderX的路径中。你可以使用一套简单的URLClassLoader来做到这一点。

+0

谢谢,我认为这完全涵盖了这个问题。还特别感谢提及OSGI,现在我知道它存在并阅读它:D – bezmax 2011-06-16 07:52:56

0

谢谢你的问题。很有意思。

在一个JVM实例中,您似乎无法使用同一类的多个版本。我从来没有这个任务,我不知道如何实现这一点。

但让我们玩吧。我不知道你开发什么特殊的应用程序。也许你可以运行许多JVM,并且每个JVM都有独有的CLASSPATH。

编写可以运行的应用程序(例如使用Runtime.exec())另一个JVM并通过某个通道(可能是网络)与其进行对话。

+0

将它加载到单独的JVM中将会消耗大量资源。 Suraj Chandran提出的方法要好得多,因为它允许使用单独的类加载器将所有内容加载到一个JVM中。 – bezmax 2011-06-16 07:54:26

+0

嗯。也许。但是你可以检查OSGi是如何工作的。这是一个非常繁重的解决方案。那么,你的决定是你的决定:-)。祝你好运! – 2011-06-16 08:07:32

相关问题