1. 程式人生 > >maven-tomcat熱部署和本地部署方式的區別

maven-tomcat熱部署和本地部署方式的區別

  以前在做專案的過程中沒有仔細考慮這兩種方式的區別,最近在做一個ERP專案時,我遇到了一個奇葩的問題:不使用maven管理的專案可以正常執行,使用maven管理後的專案總是報錯。
  我後來仔細分析了一下,為什麼會出現這個問題?我反覆的重複安裝maven專案折騰了3天,仔細的分析不使用maven管理的專案編譯後的檔案和使用maven管理後的檔案的區別。我將不使用maven管理能夠正常訪問的專案原始碼都拷貝到使用maven管理的空專案中,由於不使用maven的專案能夠正常執行說明java檔案和配置是沒有問題的。當我把所有的原始檔和配置檔案都拷貝完成後,我發現剛開始訪問主頁的時候還能夠訪問,但是登入的時候登入不成功。總是在登入頁面。
  這裡寫圖片描述


  我後來把原始碼中登入攔截器都註釋掉了,啟動了一下專案。我發現頁面時跳轉了,但是居然出現了提示“EmpModel is not mapped”的錯誤。
  這裡寫圖片描述
  我一開始以為是我的配置檔案出現了檔案,我找到配置檔案EmpModel.hbm.xml和載入該配置檔案的配置檔案applicationContext.xml中關於EmpModel.hbm.xml的路徑重新修改了一下,然後重新使用熱部署的方式運行了一下。
這裡寫圖片描述
  以為這次能行,沒想到還是不行,我暈。我後來看了一下發現我使用maven管理的專案使用的maven-tomcat的外掛的熱部署方式。出於好奇,我自己使用了Run as –> Run on Server的方式重新啟動了一下專案,我訪問之後發現,居然可以訪問了,心中一絲竊喜。
  這裡寫圖片描述

  本著嚴謹認真的態度,我分析了一下為什麼後出現這種情況?我找到了熱部署方式的原始檔的編譯後的路徑。
  這裡寫圖片描述
  我順藤摸瓜開始尋找EmpModel.hbm.xml這個檔案,我到原始碼的檔案路徑下去查詢配置檔案,我發現居然沒有這個檔案。怪不得程式會提示EmpModel is not mapped,我一開始以為有檔案但是沒有寫對。後來發現真正的問題時沒有這個配置檔案。突然間頭腦中記起來,在配置模型類時要把配置檔案放在resource資料夾中安裝模型類的類路徑進行建立包名,當初印象不深。今天折騰了幾天之後,估計以後不會忘了。
  我後來,分析了一下部署在本地的tomcat的編譯結果,我發現通過本地部署的方式,對映檔案已經被拷貝到了編譯後class資料夾中,這個資料夾的路徑如下圖所示。
  這裡寫圖片描述

  到這個class目錄對應的emp模型類中我發現,可以找到配置檔案EmpModel.hbm.xml。怪不得通過本地部署的方式就沒有問題。
  通過這個錯誤,加深了我對專案部署方式的認識。以後如果採用maven外掛熱部署的方式,一定要將對映檔案放在resource資料夾中建立好包名;如果要是使用本地tomcat部署的方式就不用管了,編譯後會將配置檔案放在相應的路徑中。