Eclipse 功能未找到异常

22

我使用maven构建了我的项目,所有构建都成功了,而且Eclipse属性生成也成功了。

但是当我在Eclipse 4中打开该项目时,我收到了这个错误信息:

An internal error occurred during: "Loading descriptor for SALYExplorer.".
org.eclipse.emf.ecore.xmi.FeatureNotFoundException: Feature 'taglib' not found. (platform:/resource/SALYExplorer/src/main/webapp/WEB-INF/web.xml, 313, 10)

在那个位置我有一些属性。

虽然项目运行顺利,一切都很好,但在导航窗格中浏览项目时,Eclipse总是会弹出这个错误框(非常令人烦恼)。

代码位置如下:

<taglib>
    <taglib-uri>xx.tld</taglib-uri>
    <taglib-location>/WEB-INF/tld/xx.tld</taglib-location>
</taglib>

并且xx在它的文件中被定义为整数

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
     "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_2.dtd">
<taglib>

  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
.........
</taglib>

我有同样的烦恼。希望您不介意我添加堆栈跟踪。 - Dale
当然可以添加。我仍在寻找一些解决方案。 - RaceBase
11个回答

26

问题并不在于标签库,而是 Eclipse 给出的错误描述不够准确。

问题源于项目的 facet 和 web.xml dtd 版本必须匹配!

如果 web.xml 中写道:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
但是该项目有一个

 "Dynamic Web Module 2.5"

那么就会出现这个错误...将facet更改为2.3或web.xml更改为2.5...换句话说:它们必须匹配..


3
对我有用。不幸的是,Eclipse不允许我直接更改动态Web模块Facet的版本。我必须手动更改配置文件“org.eclipse.wst.common.project.facet.core.xml”。该Facet在内部称为“jst.web”。 - Menachem

6

我在尝试在Eclipse(ALT+F5)中更新Maven项目时遇到了这个错误。

web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="3.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

以及项目方面

Dynamic Web Modul 3.0

这是我可以解决它的方法:
web-app元素中删除所有的xmls-schema定义。
<web-app>

然后更新Maven项目(ALT+F5)。

重新插入模式定义并重新更新项目(ALT+F5)。


1
这个解决方案也适用于解决以下问题:安装JAX-RS(REST Web服务)2.0失败。org.eclipse.emf.ecore.xmi.ClassNotFoundException:找不到类'web-app'或者是抽象的。 - Carlitos Way

4
根据从web-app_2_5.xsd中包含的jsp_2_1.xsd,taglib标签应该在jsp-config标签中:
<xsd:complexType name="jsp-configType">
<xsd:annotation>
  <xsd:documentation>

The jsp-configType is used to provide global configuration
information for the JSP files in a web application. It has
two subelements, taglib and jsp-property-group.

  </xsd:documentation>
</xsd:annotation>

<xsd:sequence>
  <xsd:element name="taglib"
       type="javaee:taglibType"
       minOccurs="0"
       maxOccurs="unbounded"/>
  <xsd:element name="jsp-property-group"
       type="javaee:jsp-property-groupType"
       minOccurs="0"
       maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:ID"/>

当我将taglib包装在js-config中时,错误消失了。
<jsp-config>
    <taglib>
        <taglib-uri>http://www.springframework.org/tags/form</taglib-uri>
        <taglib-location>/WEB-INF/taglibs/spring-form.tld</taglib-location>
    </taglib>
</jsp-config>

以前的解析器可能会更宽容。我的配置:Eclipse Luna,内置maven 3.2.1,web.xml 2.5,Dynamic Web Project facet 2.5。


1

如果您目前只是想解决烦人的错误信息,那么作为一个短期解决方案,请尝试在此处禁用验证:Eclipse 'loading descriptor' takes ages

如果上述方法不起作用,另一种选择是使用AHK(Autohotkey),这需要您付出更多的努力。(我已经使用AHK脚本几年了,以摆脱我不关心的Eclipse错误弹窗)

Eclipse Bug 198630 已经提出了将近5年,其中有一个评论与OP几乎相同的错误信息。(该错误最终被关闭,因为无法重现)。

我有以下问题要问您:

  1. 您能否向我们展示错误日志?(要获取错误日志,您可以查看错误日志视图或查看实际文件:WORKSPACE_HOME/.metadata/.log。请参阅this以获取更详细的信息。)
  2. 您是否使用任何特定的服务器适配器,如WebLogic或Glassfish?

我有以下建议:

  1. 在 Eclipse 的 Bug 帖子中,问题至少通过更新到特定的 JST 版本得到了解决。因此,您是否可以运行 Eclipse 更新并查看问题是否已解决?(可以通过转到帮助 -> 检查更新来完成)

  2. 是否可以尝试在 Eclipse Indigo 中导入项目(而不是当前使用的 Juno)并查看是否可以重现问题?(Eclipse Indigo 下载可以在这里找到,我相信您需要Java EE 版本


很好,请尝试一下我上面提出的其他建议吧。 - Ashutosh Jindal
如果审核员批准,将在原问题中添加堆栈跟踪。我使用的是Juno并刚刚更新,但仍然无法解决问题。 - Dale
此外,暂停所有验证器也没有帮助。 - Dale

0
我怀疑问题出在Eclipse Web Tools Platform和Java EMF Model上。这是一个插件列表的图像,其中包括来自Eclipse Web Tools Platform的Java EMF Model和JEM stuff: List of plugins including Java EMF Model and JEM stuff from Eclipse Web Tools Platform

https://stackoverflow.com/users/1503535/nitin-gurram,你的堆栈跟踪看起来像这样吗?

!ENTRY org.eclipse.core.jobs 4 2 2012-09-28 12:10:00.554
!MESSAGE An internal error occurred during: "Loading descriptor for grch97.".
!STACK 0
org.eclipse.emf.ecore.resource.impl.ResourceSetImpl$1DiagnosticWrappedException: org.eclipse.emf.ecore.xmi.FeatureNotFoundException: Feature 'taglib' not found. (platform:/resource/grch97/WEB-INF/web.xml, 891, 11)
    at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.handleDemandLoadException(ResourceSetImpl.java:319)
    at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:278)
    at org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl.getResource(ProjectResourceSetImpl.java:1003)
    at org.eclipse.jst.jee.model.internal.JEE5ModelProvider.getModelResource(JEE5ModelProvider.java:169)
    at org.eclipse.jst.jee.model.internal.Web25ModelProvider.getModelObject(Web25ModelProvider.java:44)
    at org.eclipse.jst.jee.model.internal.JEE5ModelProvider.getModelObject(JEE5ModelProvider.java:215)
    at org.eclipse.jst.jee.model.internal.common.AbstractMergedModelProvider.loadProviders(AbstractMergedModelProvider.java:261)
    at org.eclipse.jst.jee.model.internal.common.AbstractMergedModelProvider.access$2(AbstractMergedModelProvider.java:255)
    at org.eclipse.jst.jee.model.internal.common.AbstractMergedModelProvider$LoadModelsWorkspaceRunnable.run(AbstractMergedModelProvider.java:278)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
    at org.eclipse.jst.jee.model.internal.common.AbstractMergedModelProvider.loadModel(AbstractMergedModelProvider.java:249)
    at org.eclipse.jst.jee.model.internal.common.AbstractMergedModelProvider.getMergedModel(AbstractMergedModelProvider.java:219)
    at org.eclipse.jst.jee.model.internal.common.AbstractMergedModelProvider.getModelObject(AbstractMergedModelProvider.java:139)
    at org.eclipse.jst.jee.ui.internal.navigator.Web25ContentProvider.getNewContentProviderInstance(Web25ContentProvider.java:69)
    at org.eclipse.jst.jee.ui.internal.navigator.LoadingJeeDDJob.run(LoadingJeeDDJob.java:50)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: org.eclipse.emf.ecore.xmi.FeatureNotFoundException: Feature 'taglib' not found. (platform:/resource/grch97/WEB-INF/web.xml, 891, 11)
    at org.eclipse.emf.ecore.xmi.impl.XMLHandler.reportUnknownFeature(XMLHandler.java:1985)
    at org.eclipse.emf.ecore.xmi.impl.XMLHandler.handleUnknownFeature(XMLHandler.java:1949)
    at org.eclipse.emf.ecore.xmi.impl.XMIHandler.handleUnknownFeature(XMIHandler.java:145)
    at org.eclipse.emf.ecore.xmi.impl.XMLHandler.handleFeature(XMLHandler.java:1893)
    at org.eclipse.emf.ecore.xmi.impl.XMLHandler.processElement(XMLHandler.java:1017)
    at org.eclipse.emf.ecore.xmi.impl.XMIHandler.processElement(XMIHandler.java:81)
    at org.eclipse.emf.ecore.xmi.impl.XMLHandler.startElement(XMLHandler.java:995)
    at org.eclipse.emf.ecore.xmi.impl.XMLHandler.startElement(XMLHandler.java:706)
    at org.eclipse.emf.ecore.xmi.impl.XMIHandler.startElement(XMIHandler.java:163)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.load(XMLLoadImpl.java:175)
    at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doLoad(XMLResourceImpl.java:240)
    at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1505)
    at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1284)
    at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoad(ResourceSetImpl.java:259)
    at org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl.demandLoad(ProjectResourceSetImpl.java:811)
    at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:274)
... 14 more

0

我刚遇到了相同的症状,使用maven的一个web-app项目。在我的情况下,与web.xml中的struts taglib标签有关,以及项目具有struts v1.2.9依赖项。我通过切换到struts v1.3.10解决了这个问题。不要问为什么这样解决了问题。

如果您处于相同的情况,并且将您的struts依赖项从1.2.9升级到1.3.10,请确保在您的web.xml的DOCTYPE声明中至少使用dtd v2.3:

! DOCTYPE web-app PUBLIC“ - // Sun Microsystems,Inc。// DTD Web Application 2.3 // EN”“http://java.sun.com/j2ee/dtds/web-app_2_3.dtd”

否则你会遇到另一个问题(您的Web应用程序将在没有互联网连接的情况下启动失败)

希望这能帮助到你


我在web.xml中使用2.3版本,问题仍然存在。 - RaceBase
使用Struts 1.3.10?我进行了测试:在Struts 1.2.9和1.3.10之间切换(并运行Eclipse的Maven构建或安装)。我在前者中得到了令人烦恼的消息,而在后者中没有。 - François-Paul Servant
我在以下代码行中遇到了问题:<taglib> <taglib-uri>xx.tld</taglib-uri> <taglib-location>/WEB-INF/tld/xx.tld</taglib-location> </taglib> 以及在它的文件中有xx定义<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> - RaceBase

0

我成功将项目的Java Facet更新到1.5版本,错误消失了。


0

我曾在使用eclipse 4.3 (Kepler), maven 3.1.0, tomcat 6.0.37 和 jdk7 (同时安装了jre6)的过程中遇到类似的错误,并通过在eclipse中配置tomcat以解决或至少摆脱了烦人的错误。

在 Preferences->Server-> Runtime Environments 中,定义一个名为"Apache Tomcat 6.0"的新运行时环境,并从已安装的JREs中选择jre6的安装位置。

然后查看项目属性中的 Targeted Runtimes。Apache Tomcat v6.0 应该与 Java Runtime Environment v1.6 相关联 (如果还没有定义,请按“新建”并检查所选的JRE是否是java 1.6 runtime)。

希望对你有所帮助。


0

我成功解决了这个问题,方法是将验证器从每个出现问题的项目的 .project 文件中移除。


1
你能再详细解释一下这个答案吗? - Zoot

0
在我的情况下,这个问题通过使用版本 org.eclipse.emf.ecore.xmi_2.10.2.v20150123-0348org.eclipse.emf.ecore.xmi.source_2.10.2.v20150123-0348 以及 org.eclipse.emf.ecore.xmi_2.10.2.v20150123-0348org.eclipse.emf.ecore.xmi.source_2.10.2.v20150123-0348 以及 org.eclipse.emf.common_2.10.1.v20150123-0348 的 jars 在构建路径中得到解决。旧版本的早期 jars 被使用,尽管新版本已经存在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接