2014-05-19 38 views
5

我知道有很多关于此主题的问题。但他们主要是关于保持类和变量的状态。在JVM运行时期间重新加载类

我想让我的应用程序获得它的最新版本(全部打包在一个jar中)并重新启动。

我的应用程序使用main()函数只是作为一个起点,所以我只是初始化一个类,整个应用程序从那里开始。这让我想到了。我可以在main()中停止整个应用程序。理论上,覆盖旧的JVM,然后JVM可以重新加载除包含main()的类以外的所有类,并且main将重新初始化所有内容并运行它。

这太麻烦了吗?我应该只使用一个只能处理启动所述jar并下载它的最新版本的引导程序jar。

+4

bootstrap shell脚本可能是最简单的。 –

+0

你想在运行时改变jar吗?并不想重新启动JVM? – Vipin

+0

从我的猜测,你至少需要a)为主类和可重载类使用不同的jar b)在你的主类中仅使用反射c)最有可能用于可重载jar的不同ClassLoader – EasterBunnyBugSmasher

回答

-3

在自动更新几乎总是总是有一个引导应用程序,控制主应用程序的执行。我确信这方面也有很多例子。

0

我会考虑使用OSGi容器。这里有很多轻量级的低开销实现,如Apache FelixEclipse Equinox。许多Java应用程序服务器都建立在OSGi内核之上。 它允许您在运行时轻松热插拔整个罐子(捆绑包)或甚至更小的粒度单位(特征),而且几乎毫不费力。