今天在發佈項目的時候遇到了一個關於編譯的問題,問了同事才搞清楚原因,下面詳細說一下我所遇到的問題。
我在本地改了一個實體類,把其中的一個字段類型由String改爲了Integer,
重新編譯之後,我單獨把該class文件拖放到服務器上,然後重啓tomcat,
發現在service中調用該實體的被修改字段的get方法的時候,報錯,說是找不到String類型,
我覺着奇怪,明明已經在實體類中改了類型了,通過反編譯實體類的class文件,發現已經是修改之後的Integer類型,
但是調用該字段的get方法的實體類我沒有重新編譯,
最後同事告訴我,service是因爲編譯之後在JVM中運行的二進制還是修改之前String類型的,所以才報的這個錯誤。
如下圖,是實體類修改之前的service的編譯文件,直接打開查看的(UTF-8編碼格式下查看的):
下圖這個是重新編譯之後的service的class文件:
雖然這個service沒有修改,但是由於引用的實體類改變了,所以也需要重新編譯之後再發布一下!
在這裏感謝一下同事,哈哈!