2014-05-19 66 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內核之上。 它允許您在運行時輕鬆熱插拔整個罐子(捆綁包)或甚至更小的粒度單位(特徵),而且幾乎毫不費力。