Maven Project 轉 Dynamic Web Project
通常的web項目, 我都習慣用 maven 來構建, 但是有時候小項目, 用不到幾個依賴, 用 maven 顯得比較笨重. 反而用 eclipse 的 Dynamic Web Project 更方便一些. 但是二者之間構建的目錄結構不同, 拋開表面看本質, 既然都是web項目, 同樣打成 war 包來運行, 最終構建出來的項目結構肯定是一樣的.
先從兩者之間的目錄結構說起
Maven Project 結構
新建一個maven 項目 MavenDemo, 直接選 create a simle project
創建一個簡單項目, 跳過選擇模板. 就生成一個標準的 web 項目的目錄結構
其中用紅線框起來的地方, 其實不是真實的磁盤目錄, 是 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-INF
和WEB-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 |
知道了對應關係, 只要將目錄中的文件進行相對應的移動, 就可以將項目相互轉換.