2013-07-10 96 views
8

最近我對Java桌面應用程序應用了修復程序。我通過更改我的某個類中的代碼,編譯它並將新jar發送到生產環境來完成此操作。如何修補Java程序?

我現在被問到是否可以通過複製我修復的已編譯的類來修補生產中的jar,甚至創建一個修補程序/腳本,以便只更新已修改的文件。

附加信息:

  1. 補丁沒有在運行過程中被應用。這意味着補丁可以作爲一個單獨的程序或活動來完成。我的舊程序不需要自動更新。
  2. 這可以通過Web應用程序(WAR文件)來完成嗎?

我想出的最好的答案是這個,但它已經2歲了。 Patching Java software

我的要求很少見嗎?我從來沒有見過一個教程來修補一個Java應用程序。

+0

這個問題似乎是題外話題,因爲它是關於基礎設施 - 更適合程序員或可能serverfault – Bohemian

回答

7

我現在被問到是否可以通過複製我修復的編譯類來修補生產過程中的jar,甚至創建一個修補程序/腳本,它只能修改修改過的文件。

是的。可以使用jar -u修補JAR文件。也可以用相同的方式修補WAR文件。

但我不會推薦它。 JAR或WAR文件應該是部署/管理的單位。如果您開始在生產服務器上修補JAR/WAR文件,那麼很難跟蹤實際在哪裏使用的內容。如果你不小心,混亂和混亂將統治。

修補程序不可避免的唯一情況是您擁有第三方庫或您無法從源代碼構建的內容,但仍需要修改。但即使在這種情況下,最好修改構建平臺上的JAR/WAR並部署修改後的JAR/WAR。嘗試在生產平臺上修補JAR,WAR或部署的Web應用程序是一個糟糕的主意。


是我的要求罕見?

是的。還有更好的辦法...

我從來沒有見過一個教程來修補一個Java應用程序。

並不奇怪,因爲有一個更好的辦法...

+0

感謝您的回答。正如我在重新部署測試的Jar/War時所說的那樣,我通常是這樣做的。這是我們安全和標準部門的授權,我很高興我不是唯一一個認爲這個要求很奇怪的人。 –

+0

@JefreyValencia - 我很想試着用「爲我們提供補丁和正確測試的JAR」。我也很想知道他們要求你打補丁。這聽起來有點奇怪..。 –

+0

嗨Stephen,或多或少,安全和標準團隊只是試圖監視我們對已經在生產中的應用程序所做的更改。他們給出的例子之一(簡化/改寫)是,如果Windows操作系統中存在錯誤,您只需對其進行修補而不是重新安裝應用程序。這個說法是有道理的,但是在我有限的經驗中,我不知道這是否是可行的,甚至是Java應用程序的良好實踐。 –

4

您可以通過執行jar uf jarfile classfile(s)

這將替換同名舊的類文件與新的更新舊罐子,使用不應該很難

+0

謝謝你的答案,只是選擇斯蒂芬的答案,因爲他還添加了額外的信息。 –

2

對於部署Java桌面應用程序進行自動修補。 ,最好的選擇通常是安裝應用程序。使用Java Web Start。 JWS適用於Windows,OS X & * nix。它包括自動更新。

這可以通過Web應用程序(WAR文件)來完成嗎?

號JWS適用於桌面應用程序。只要。

+0

謝謝你的回答。我們可能會在未來的桌面應用程序上嘗試此操作 –

0

看看到Getdown - 其目的是提供下載和在用戶的計算機上安裝的文件的採集和升級這些文件的文件系統如所須。