頻頻出現Hot code replace failed問題。網上查不到解決方法,想來想去,是否是jvm的問題?我的jre使用自己下載的jdk1.6.07,而MyEclipse的jvm自帶的是1.5.0.011版本的,於是更換成jdk1.6.07,該問題解決。
修改方法:myeclipse.ini里面的C:\Program Files\Genuitec\Common\binary\com.sun.java.jre.win32.x86_1.5.0.011\bin\client\jvm.dll改成自己的C:\Program Files\Java\jdk1.6.0_07\jre\bin\client\jvm.dll。
eclipse/myeclipse 進java代碼的開發,特別是web應用開發,一般情況下,修改配置文件(如web.xml)重啟服務器才生效.而修改jsp頁面,則不用重啟.
若修改的是java文件,有兩種情況:
1.小規模的修改,沒有改變類的塊結構,不用重啟服務器,也可以立即生效.(前提是同步發布,即要勾上菜單 project->build automatically)
2.修改了類的結構(如增加或刪除類的方法,字段).如果是這種情況,myeclipse會有"hot code replace fail"的提示,和失敗的原因的說明(如add method not implemented, scheme change not implemented 等),並且提示重新啟動服務器.這種情況要重啟服務器才可以生效.
3.還有一種情況,對java文件進行小的修改(如 代碼中不重要的地方加一個空格 )然后保存,myeclipse也會提示hot code replace fail.這種情況遇到的幾率很小. 這種情況的很可能是服務器(如tomcat)下面發布了多個web應用程序,而所修改的類的名字在多個web應用中存在(如 有app1和app2兩個應用, app1中有個類com.company.LoginAction, app2中也有個類com.company.LoginAction. 修改的是app1中的LoginAction ).
個人猜測:jvm在進行hot code replace的之前,將所修改的類(app1中的LoginAction)與另外一個應用中的同名類(app2中的LoginAction)對比,發現兩者有結構上的差異,於是認為該類的改變很大,不能夠進行hot code replace.
有種簡單的方法可以驗證,是否屬於第三種情況.只部署一個工程在服務器下,啟動后,再修改java類,如果是小的修改,這個時候myeclipse就不會再有hot code replace fail 的提示了.
