Eclipse Oxygen每次保存触发FeatureNotFoundException如何解决
解决Eclipse Oxygen中保存时web.xml的FeatureNotFoundException问题
我之前维护老项目时碰到过一模一样的错误,结合你提到的Servlet版本兼容推测,这个问题基本是web.xml里的init-param元素不符合当前Servlet版本的规范,或者项目的Servlet版本配置和web.xml的声明不匹配导致的。以下是一步步的排查和解决方法:
1. 先定位错误根源:检查init-param的位置
打开你的web.xml,直接跳到第72行,看看这个init-param的父元素是什么。init-param是不能直接放在<web-app>根节点下的,它必须属于某个<servlet>或者<filter>元素。举个正确的例子:
<servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> <!-- 正确的init-param位置 --> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </servlet>
如果你的init-param是直接挂在<web-app>下面,那肯定会触发这个错误,把它移到对应的servlet或filter节点里就行。
2. 核对项目Servlet版本和web.xml声明的一致性
Eclipse的Dynamic Web Module版本必须和web.xml开头的声明完全匹配,否则会出现这类兼容性错误:
- 右键你的项目 → Properties → Project Facets,查看
Dynamic Web Module的版本(比如2.5、3.0、3.1)。 - 然后看web.xml的开头声明:
- 如果是Servlet 2.5,用的是DTD声明:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.5//EN" "http://java.sun.com/dtd/web-app_2_5.dtd"> - 如果是Servlet 3.0及以上,用的是XMLSchema声明(以3.1为例):
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
- 如果是Servlet 2.5,用的是DTD声明:
3. 清理Eclipse缓存,重新构建项目
有时候Eclipse的缓存会抽风,导致明明配置正确还是报错:
- 点击顶部菜单的Project → Clean...,选中你的项目,点击OK清理。
- 清理完成后,右键项目 → Refresh,然后重新构建(Project → Build Project)。
4. 极端情况:重新生成web.xml骨架
如果以上方法都没用,可能是你的web.xml存在隐性的格式问题:
- 右键项目 → Java EE Tools → Generate Deployment Descriptor Stub,Eclipse会生成一个符合当前项目Servlet版本的标准web.xml。
- 把原来web.xml里的配置内容(servlet、filter、listener等)手动迁移到新生成的文件里,替换掉旧的web.xml。
按照这个流程走下来,基本能解决这个Feature 'init-param' not found的错误。
内容的提问来源于stack exchange,提问作者Joshua Fox
相关产品推荐
相关产品推荐

