今天早上參與了舊系統的考古工作
系統更換DB之後,突然就掛掉了。
後來查明原因是mySql舊版本對語法並不嚴謹,查詢字串時可以不給 " 一樣可以通過。
前人就這樣直接上正式環境,在半夜更換DB時就開始查詢失敗。
最後請DBA調出log才知道問題在哪。
但知道問題後才發現還有更多的問題
當系統太過老舊,連source code都已經失傳時。
該如何替換新的檔案呢?
內部的SVN上有程式,但已經無法確認是否與production是否相同。
此時就只能把war下載下來並開啟壓縮檔案抽換程式。
確認好可以抽換檔案後,又要來確認程式是否可以build
一開始想說把source code直接javac 編譯後就好
後來發現會產生
error: package org.apache.commons.logging does not exist
import org.apache.commons.logging.LogFactory;
這種奇怪的錯誤
一開始以為是javac 指定的資料夾位置不對,後來還是找不到apache.commons的jar
接著決定轉向改由eclipse去取得編譯好的.class
因SVN的source code實在太過老舊,未使用maven或gradle。
只能從new project開始,先填project 名稱、選擇jre版本,接著點選[Finish]
接著就會自動建好project,接著要匯入外部的java檔案。
在project上點選滑鼠右鍵,選擇[import…]
接著選擇[File System],之後點選[Next >]
接著選[Browse…],選取要匯入的資料夾。
選好後就會在左側的方框內看到,把要匯入的資料夾打勾並點選[Finish]
完成以上步驟後,應該就能在Package Explorer內看到剛剛匯入的檔案。如下圖
不過這樣還是有點問題,匯入的檔案不在src內
所以不會被eclipse編譯
從上方menu選擇Window>Show View>Navigator(Deprecated)
點選後會出現Navigator,可以看到bin資料夾內是沒有檔案的
若是把匯入的檔案移動到src內(如下圖),就能看到bin資料夾有被eclipse編譯好的檔案。
最後只要取得bin內的.class檔案,再開啟war檔抽換編譯好的新檔案並重新佈署。
若是要變更.class的default位置
可以點選project右鍵>Build Path>Configure Build Path…
選擇後,更改下方的Default output folder:欄位的位置並Apply即可。