兩種結構對照
| 特徵 | 傳統 Java Web (Dynamic Web Project) | Maven Web Project |
| 源碼目錄 | `src` (直接放 package) | `src/main/java` |
| 資源檔 | `src` 混雜 | `src/main/resources` |
| Web 資源 | `WebContent` / `WebRoot` | `src/main/webapp` |
| 編譯輸出 | `build/classes` | `target/classes` |
| 打包產物 | 手動 Export WAR | `target/*.war` (mvn package) |
| 依賴管理 | 手動加 JAR 到 `WEB-INF/lib` | `pom.xml` 宣告,Maven 自動下載 |
| 測試代碼 | 無標準位置 | `src/test/java`, `src/test/resources` |
為何無法直接轉換
- **建構模型不同**:Eclipse 專案靠 `.project`、`.classpath` 內建 Builder;Maven 專案靠 `pom.xml` 統一構建生命週期。
- **目錄約定不同**:Maven 強制標準目錄結構 (Convention over Configuration),Eclipse 可任意設定源碼資料夾。
正確遷移步驟
- **建立新 Maven 專案**:File → New → Maven Project → 選 `maven-archetype-webapp`。
- **複製源碼**:將舊 `src` 下的 package 整個拖到 `src/main/java`;資源檔 (xml, properties) 移至 `src/main/resources`。
- **複製 Web 資源**:`WebContent`/`WebRoot` 內容 → `src/main/webapp` (含 `WEB-INF/web.xml`)。
- **配置 `pom.xml`**:補上依賴 (Servlet API, JSP, JSTL, 資料庫驅動、框架等),設定 `war`。
- **右鍵專案 → Maven → Update Project**,Eclipse 會自動配置 `.classpath`、Deployment Assembly。
- **部署測試**:右鍵 → Run As → Maven install → 產出 `target/*.war` 丟入 Tomcat `webapps`。
常見遷移問題
| 問題 | 解決 |
| JSP 編譯找不到類別 | 確認 `src/main/java` 標記為 Source Folder (Build Path)、`pom.xml` 有 `maven-compiler-plugin` 設定 JDK 版本。 |
| 資源檔未打包進 WAR | 檢查 `src/main/resources` 在 `target/classes` 輸出,或在 `pom.xml` `` 明確包含。 |
| 第三方 JAR 衝突 | 移除 `WEB-INF/lib` 手動放的 JAR,改在 `pom.xml` 宣告依賴,Maven 传递依賴自動解決版本衝突。 |
**結論**:不要嘗試就地修改目錄結構,**重新建立 Maven 專案並遷移代碼** 是標準、穩健的做法。