在JVM运行时期间重新加载类

时间:2014-05-19 13:41:02

标签: java class jvm classloader

我知道有很多关于这个话题的问题。但它们主要是关于保留类和变量的状态。

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

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

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

2 个答案:

答案 0 :(得分:0)

我会考虑使用OSGi容器。这里有许多轻量级,低开销的实现,如Apache FelixEclipse Equinox。许多Java应用程序服务器都是在OSGi内核之上构建的。 它允许您在运行时轻松地热交换整个jar(捆绑)或甚至更小粒度的单元(功能),而且几乎没有任何工作。

答案 1 :(得分:-3)

在大多数纪念性的Java应用程序中,自动更新几乎总是总是有一个控制主应用程序执行的引导程序。我相信这也有很多例子。