Maven Project 轉 Dynamic Web Project

Maven Project 轉 Dynamic Web Project

通常的web項目, 我都習慣用 maven 來構建, 但是有時候小項目, 用不到幾個依賴, 用 maven 顯得比較笨重. 反而用 eclipse 的 Dynamic Web Project 更方便一些. 但是二者之間構建的目錄結構不同, 拋開表面看本質, 既然都是web項目, 同樣打成 war 包來運行, 最終構建出來的項目結構肯定是一樣的.
先從兩者之間的目錄結構說起

Maven Project 結構

新建一個maven 項目 MavenDemo, 直接選 create a simle project 創建一個簡單項目, 跳過選擇模板. 就生成一個標準的 web 項目的目錄結構
MavenDemo
其中用紅線框起來的地方, 其實不是真實的磁盤目錄, 是 eclipse 從磁盤目錄中提取出來的, 方便書寫 Java 代碼和資源的.

真實的磁盤目錄結構可以通過 navigator 窗口查看
在這裏插入圖片描述
如果項目部署到 tomcat 容器中, 在磁盤中的目錄結構爲, 在 MavenDemo 項目名目錄下:
在這裏插入圖片描述

然後再來看一眼部署目錄
在這裏插入圖片描述
這是maven項目的部署目錄, Source 欄對應的是源代碼的目錄, Deploy Path 對於部署路徑.

  • /src/main/java: java源代碼, 編譯後的 .class 文件存放在 classes 目錄下.
  • /src/main/resource: 資源配置文件, 獲取這裏的文件, 例如spring配置文件中, 利用classpath: 可以獲取此目錄, 也就是 classes 根目錄, 存放 .class 文件, 也就是 ClassLoader 所在目錄, 利用 ClassLoader 可以獲取此目錄下文件.
  • /src/main/webapp: 對應項目根目錄, 目錄中含有 WEB-INF 目錄, 從上圖可以看出, 雖然在源代碼目錄結構中, Java, resource, webapp 在同一級, 但是當部署到服務器後, webapp 是對應 / 根目錄, java和resource中的文件在 /WEB-INF/classes 目錄中, 差了2個層級.
  • /target/m2e-wtp/web-resource: 對應項目根目錄, 目錄中含有 META-INF 目錄, 其中主要是簽名用的.
  • maven依賴jar包: 部署後在 /WEB-INF/lib 下

Dynamic Web Project 結構

直接新建一個 Dynamic Web Project 項目, 默認的目錄結構, 建完以後:
在這裏插入圖片描述
同樣的, 在磁盤的目錄結構爲:
在這裏插入圖片描述
最重要的, 還是要看部署路徑:
在這裏插入圖片描述
同樣的

  • src: 爲Java文件的存放目錄, 對應部署目錄的 /WEB-INF/classes
  • WebContext: 包含 MATE-INFWEB-INF 兩個重要的目錄. WEB-INF 下還包含 lib 目錄.
    到目前爲止, 我們就找到了 Maven Project 和 Dynamic Web Project 兩種項目結構的關聯.

Maven Project 和 Dynamic Web Project 手動互轉

可能 eclipse 支持一些自動轉換, 我沒有去研究.
因爲我們知道了 Maven Project 和 Dynamic Web Project 最終都是要轉換爲部署到 tomcat的 war 包, 而 war 包中的結構是固定的. 所以, 我們就找到了兩種項目相互轉換的依據.

對應關係:

Maven Project Dynamic Web Project Deploy Path
src/main/java src WEB-INF/classes
src/main/resource src WEB-INF/classes
src/main/webapp/(內有WEB-INF) WebContext(內有WEB-INF, MATE-INF) /
/target/m2e-wtp/web-resource(內有MATE-INF) WebContext/MATE-INF /
maven依賴jar包 WebContext/WEB-INF/lib /WEB-INF/lib

知道了對應關係, 只要將目錄中的文件進行相對應的移動, 就可以將項目相互轉換.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章