將 Maven Web 項目導入 Eclipse/IDEA 時,常遇到「Cannot change version of project facet Dynamic Web Module to 2.3」錯誤。原因是 web.xml 版本聲明與項目 Facet 設置不一致。
修改 src/main/webapp/WEB-INF/web.xml 文件頭部聲明,升級至 Servlet 3.0 規範:
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns="https://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="https://java.sun.com/xml/ns/javaee
https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- 原有配置內容 -->
</web-app>
xmlns="https://java.sun.com/xml/ns/javaee":聲明 Java EE 命名空間xsi:schemaLocation 指向 web-app_3_0.xsd:對應 Servlet 3.0version="3.0":明確聲明版本| Servlet 版本 | web-app 版本 | 對應 XSD | 最低容器 |
|---|---|---|---|
| 2.3 | 2.3 | web-app_2_3.xsd | Tomcat 4/5 |
| 2.4 | 2.4 | web-app_2_4.xsd | Tomcat 5.5/6 |
| 2.5 | 2.5 | web-app_2_5.xsd | Tomcat 6/7 |
| 3.0 | 3.0 | web-app_3_0.xsd | Tomcat 7+ |
| 3.1 | 3.1 | web-app_3_1.xsd | Tomcat 8+ |
| 4.0 | 4.0 | web-app_4_0.xsd | Tomcat 9+ |
web.xml 保存Maven 項目默認生成的 web.xml 可能是舊版本聲明,而現代 IDE 的 Web Facet 默認版本較高,版本不匹配導致項目識別失敗。統一聲明為項目實際使用的 Servlet 版本即可解決。