2012-01-12 171 views
0

我需要開發一個可以支持任何版本的服務器的客戶端。每次使用客戶端連接新服務器時,都會在客戶端上存儲適當的服務器信息,並且需要將類服務器設置爲當前服務器特定的類路徑位置。基於服務器版本類路徑需要設置。我正面臨動態設置這個類路徑。我總是得到ClassNotFound異常。你能否建議我如何實現這一目標?動態設置類路徑

+1

更多細節將不勝感激。這臺新服務器是否在另一臺機器上?這看起來像是一個部署問題。你用什麼來部署? – fge 2012-01-12 10:56:28

+0

您正在嘗試做什麼RMI(通過網絡更新軟件版本)或Java WebStart? – 2012-01-12 10:58:26

回答

0

類路徑不能在運行時動態設置。你可以在這裏做兩件事:熟悉OSGi或編寫你自己的類加載器。 對於這個特殊的例子,寫自己的類加載器會更容易。你在服務器特定的類路徑中保留什麼?類,資源,什麼?一些細節可以幫助。

+0

在服務器的特定classpath中我將罐子性文件,該文件是特定於服務器的特定版本。 – user1145302 2012-01-12 11:33:49

+0

所以你需要從運行時加載瓶子的clasess?試試這裏http://stackoverflow.com/questions/60764/how-should-i-load-jars-dynamically-at-runtime – 2012-01-12 11:40:12

0

我不知道究竟是你想什麼來實現,但假設你有所有在您的客戶機需要的庫,你只是試圖基於特定參數在運行時更改類路徑從服務器接收,那我就去ClassWorlds

我會嘗試定義一組使用ClassWorlds'配置文件和客戶端的主類類領域的將實施using the ClassWorld argument in the main method。然後,從服務器收到的參數將是任何這些領域的名稱。因此,在閱讀領域參數之後,您只需要將switch the current thread's classloader添加到由ClassWorlds爲特定領域創建的參數。