如果你在Eclipse中進行Debug, 可以直接修改, 不必重啟JVM就看到效果. 例如, 在blah()的下一行設定斷點, 然後修改字串blah為quz, 儲存檔案就可以繼續執行新程式碼. 同樣的方法可以使用在Tomcat Web應用的Debug中, 但是需要一些配置. What’s the Catch? 有什麼條件嗎? 使用hot code replacement 有一些限制, 你不能使用JPDA HCR 去修改一個類的簽名(例如增刪成員變數), 或新增新類. 另外, 一些被稱為 (“stack frames”) 的方法不能被修改, 包括 main 方法或任何透過反射呼叫的方法(any method invoked via reflection, that is, by using java.lang.reflect.Method.invoke()). 商業的解決方案 JavaRebel JavaRebel 是一個比JPDA HCR 強大得多的熱部署工具. 使用JavaRebel 你可以增刪方法, 增刪Java類而不需要重啟Tomcat, 不過這是商業軟體 cost $1xx USD. 如何配置Eclipse使用熱部署? 在Server裡禁用專案的 “Auto Reloading”. 找到 “Servers” 模組(透過 Window -> Show View -> Servers開啟). 雙擊裡面的server 例項進入配置介面. 裡面有兩個標籤頁, Overview和Modules, 點選Modules, 找到相應的Project, 並點選Edit, 在“Auto reloading enabled”旁邊取消勾選! 就這麼簡單.
如果你在Eclipse中進行Debug, 可以直接修改, 不必重啟JVM就看到效果. 例如, 在blah()的下一行設定斷點, 然後修改字串blah為quz, 儲存檔案就可以繼續執行新程式碼. 同樣的方法可以使用在Tomcat Web應用的Debug中, 但是需要一些配置. What’s the Catch? 有什麼條件嗎? 使用hot code replacement 有一些限制, 你不能使用JPDA HCR 去修改一個類的簽名(例如增刪成員變數), 或新增新類. 另外, 一些被稱為 (“stack frames”) 的方法不能被修改, 包括 main 方法或任何透過反射呼叫的方法(any method invoked via reflection, that is, by using java.lang.reflect.Method.invoke()). 商業的解決方案 JavaRebel JavaRebel 是一個比JPDA HCR 強大得多的熱部署工具. 使用JavaRebel 你可以增刪方法, 增刪Java類而不需要重啟Tomcat, 不過這是商業軟體 cost $1xx USD. 如何配置Eclipse使用熱部署? 在Server裡禁用專案的 “Auto Reloading”. 找到 “Servers” 模組(透過 Window -> Show View -> Servers開啟). 雙擊裡面的server 例項進入配置介面. 裡面有兩個標籤頁, Overview和Modules, 點選Modules, 找到相應的Project, 並點選Edit, 在“Auto reloading enabled”旁邊取消勾選! 就這麼簡單.