2009-11-18 70 views
8

我想知道是否有可能讓Java桌面應用程序在啓動時查找某個URL以查看它是否需要更新,如果是這樣,請下載必需的JAR文件並添加他們到正在運行的程序的類路徑。在Java中運行時下載JAR文件

如果舊罐子在那裏,他們不應該被加載到類加載器,但在這一點上他們應該?是否有可能在將它們加載之前將它們交換出來,無法重新啓動應用程序?

回答

1

這是可能的,但容易出錯。

稍微更簡潔的方法是有一個「啓動器」應用程序,它不依賴於可更新JAR的任何執行上述操作,然後啓動實際應用程序。

有關此主題的更多詳細信息,您可能需要查看this question

11
+0

這就是我通常所做的。我有一個通常爲jnlp的應用程序,但在這種特殊情況下,我將從一個已經運行的vm啓動這個應用程序,並在同一虛擬機中啓動它。這部分工作。問題是啓動應用程序的應用程序通常是jnlp,並不容易更新,並且它需要一些相關的jar包來啓動其他應用程序。 Jnlp可以解決所有這些問題,但單個虛擬機需求是約束條件。 – broschb 2009-11-19 00:16:56

1

Java Web Start可能是您最好的選擇。應該在描述符中標識所需的jar文件,以便管理版本控制。

如果您有一個需要在運行時動態發現和下載類的動態應用程序,那麼您可以查看Dynamic code downloading using RMI

1

Java Web Start是一個不錯的選擇,但有一些怪癖。值得注意的是:

  • 更新的代碼必須在程序啓動前下載。更現代的方法將下載更新並在下次啓動時應用它們。
  • 默認位於沙箱內。如果你需要超出這個範圍,你必須簽署你的代碼,這很麻煩,直到你自動執行部署過程(或者使用Netbeans,它有點幫助)。
  • 問題不容易調試 - 只有工具在Java控制檯中啓用完整跟蹤。
  • 在客戶端緩存jar包容易出錯。更新時,請確保每個部署組件的URL都是唯一的,這樣緩存將不會被使用。

但是它工作得很好。據我所知,擁有一個集中版本可以輕鬆更新給定Java應用程序的最簡單方法。

-
編輯:看起來「啓動程序和透明地下載更新,如果可用」功能出現在最新的Java 6中。我還沒有嘗試過,但很快。