Eclipse“找不到自定义标签的标签库描述符”(不是JSTL!)

时间:2009-08-12 10:05:59

标签: java eclipse jsp taglib custom-tags

我有一个使用Ant构建的Java EE项目,可以完美地部署到JBoss,并且运行没有任何问题。这个项目包含一些自定义标记库(不是JSTL!),它们也没有任何困难。

问题在于Eclipse IDE(Ganymede):在使用我们的自定义标记的每个JSP文件中,JSP解析器使用此错误标记taglib包含行:

Cannot find the tag library descriptor for (example).tld

这也会导致标签库的每次使用都被标记为错误,并且由于IDE没有定义,因此无法检查标记参数等。

我们完美的JSP文件是一个红色错误的海洋,我的眼睛开始燃烧。

我怎样才能简单告诉Eclipse,“你要找的标签库描述符是”src / web / WEB-INF /(example)-taglib /(example).tld“?

我已经在Eclipse支持论坛上提出了这个问题,没有任何有用的结果。

22 个答案:

答案 0 :(得分:28)

在Eclipse Helios中,项目属性中的“Java EE模块依赖关系”已替换为“部署程序集”。

因此,为了解决Eclipse Helios的这个问题,我采用的方法如下:

  • 右键单击包浏览器中的项目,然后选择“导入...”
  • 接受默认选择“文件系统”,然后按“下一步”
  • 按From目录行中的“Browse”,转到你的tomcat安装并找到文件webapps / examples / WEB-INF / lib(我有tomcat 6,其他版本的Tomcat可能有路径webapps / jsp-examples / WEB-INF / LIB)。进入路径后按OK。
  • 点击jstl.jar和standard.jar以激活复选框
  • 在“进入”文件夹行中,单击“浏览”并选择库文件夹。我在项目中使用/ lib。
  • 点击“完成”
  • 在Package Explorer视图中右键单击项目,然后选择属性(或按Alt + Enter)
  • 点击“Java Build Path”
  • 点击“添加Jar”,点击你的项目,文件夹lib,选择jstl.jar,按OK
  • 点击“添加Jar”,点击你的项目,文件夹lib,选择standard.jar,按OK
  • 按“确定”关闭属性对话框
  • 单击Problems视图并选择消息“Classpath entry ... / jstl.jar将不会被导出或发布。可能会导致运行时ClassNotFoundExceptions。”。
  • 右键单击它并选择“快速修复”。
  • 接受默认值“将关联的原始类路径条目标记为发布/导出依赖项”,然后按“完成”。
  • 对standard.jar
  • 执行相同操作

这解决了这个问题,但是如果你想检查“部署程序集”中发生了什么,再次打开项目属性,选择“部署程序集”,你会看到已经添加了standard.jar和jstl.jar到WEB-INF / lib文件夹。

答案 1 :(得分:18)

这是我的问题以及我如何解决它......

我已经完成了上面提到的所有事情,但仍然遇到了这个错误。事实证明我使用的http://java.sun.com/jsp/jstl/fmthttp://java.sun.com/jsp/jstl/core的uri是不正确的。

尝试将uris从上面切换到:

http://java.sun.com/jstl/fmt
http://java.sun.com/jstl/core

另外,请确保您在类路径中引用了正确的jar。

答案 2 :(得分:13)

我遇到同样的问题,条纹taglib uri显示为未找到。我正在使用Indigo和Maven,当我选中Properties-> Java Build Path-> Order&导出选项卡我发现(在新项目结帐时)由于某种原因未选中“Maven Dependencies”复选框。只需检查该框并执行Maven clean安装即可清除所有错误。

我想知道Eclipse为什么不假设我想在构建路径中使用Maven依赖...

答案 3 :(得分:10)

事实证明,原因是Eclipse没有考虑这个项目实际上是一个Java EE项目;它是3.1中的一个旧项目,我们现在使用的Eclipse 3.5需要在项目配置文件中设置几个“性质”。

<natures>
    <nature>org.eclipse.jdt.core.javanature</nature>
    <nature>InCode.inCodeNature</nature>
    <nature>org.eclipse.dltk.javascript.core.nature</nature>
    <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
    <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
    <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
    <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
    <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
</natures>

我能够通过创建一个新的“动态Web项目”找到原因,该项目正确读取其JSP文件,并针对旧项目的配置进行区分。

我能找到添加这些内容的唯一方法是编辑.project文件,但重新打开项目后,一切都神奇地起作用。上面的pribeiro引用的设置不是必需的,因为项目已经符合默认设置。

pribeiro和nitind的答案都给了我想要快速启动我的搜索,谢谢。

有没有办法在UI中编辑这些“性质”?

答案 4 :(得分:8)

遇到同样的问题,我正在使用maven,所以我把它添加到我的web项目中的pom中:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version> <!-- just used the latest version, make sure you use the one you need -->
    <scope>provided</scope>
</dependency>

这解决了问题,我使用了“提供”范围,因为像OP一样,所有东西都在JBoss中工作。

以下是我找到解决方案的地方:http://alfredjava.wordpress.com/2008/12/22/jstl-connot-resolved/

答案 5 :(得分:4)

当我尝试在我的JSP中包含JSTL核心库时:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

我在Eclipse(Indigo)中遇到以下错误:

Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"

我去了项目属性 - &gt; Targeted Runtimes,然后检查我正在使用的服务器(Geronimo 3.0)。大多数人都会使用Tomcat。这解决了我的问题。希望它有所帮助!

答案 6 :(得分:3)

我今天解决了这个问题。

  • 将输出目录更改为WEB-INF / classes文件夹。 (项目/属性/ Java构建路径,默认输出文件夹)
  • 确定模块依赖关系。 (项目/属性/ Java EE模块依赖项)它们将被复制到WEB-INF / lib文件夹,在该文件夹中Eclipse也会查找标记库定义。

我希望它有所帮助。

答案 7 :(得分:3)

很大程度上取决于它是什么类型的项目。 WTP的JSP支持要求JSP文件位于WEB-INF文件夹(src / web的父级)的同一文件夹下,然后将其视为“/”以查找TLD,或者将项目元数据设置为帮助它知道root的位置(通过部署程序集在动态Web项目中完成)。您是如何引用TLD文件的,以及JSP文件位于何处?

也许我错过了Eclipse论坛的原帖;我看到的那个是在这一个之后发布了一整天。

答案 8 :(得分:2)

检查F:\apache-tomcat-7.0.21\webapps\examples\WEB-INF\lib中的两个库:

  1. 的jstl.jar
  2. standard.jar

答案 9 :(得分:2)

我遇到了同样的问题。 这就是我为解决这个问题所做的工作。

  1. 选择项目并右键单击。
  2. 点击属性。
  3. 点击图书馆标签。
  4. 点击“添加罐子”。
  5. 为您的错误添加相关jar。

答案 10 :(得分:1)

您可以直接进入构建路径 - &gt;添加库并为库类型添加选择“服务器运行时”。单击Next并选择要添加到类路径的服务器运行时,如果jstl.jar和standard.jar位于服务器的类路径中,问题就会消失。

答案 11 :(得分:1)

我正在使用Spring STS插件和Spring webmvc模板项目。我必须先安装Maven m2e插件:http://www.eclipse.org/m2e/

然后清理项目。在Project -> Clean...

答案 12 :(得分:1)

如果您的tld位于类路径上,通常位于WEB-INF目录下,则以下两个提示应解决此问题(无论您的环境设置如何):

  1. 确保TLD中的<uri>和jsp页面的taglib指令中的uri匹配。 tld的<uri>元素是标记库的唯一名称。

  2. 如果tld没有<uri>元素,Container将尝试使用taglib指令中的uri属性作为实际TLD的路径。例如我可以在WEB-INF文件夹中有一个自定义tld文件,并使用此tld的路径作为JSP中的uri值。但是,这是一种不好的做法,应该避免,因为这些路径将被硬编码。

答案 13 :(得分:0)

此错误可能来自几个不同的来源。当Eclipse未实现TLD文档中设置的JSP规范版本时,会出现一个案例(在此问题的其他答案中未提及)。 Eclipse版本通常在实现较新的servlet和JSP规范方面落后长达一年。例如,请参阅this Eclipse bug

在这种情况下,您的Web应用程序可能在最新版本的Tomcat中正常运行,但Eclipse仍可能会抱怨缺少TLD。短期解决方案(忽略Eclipse中的错误)是将JSP版本降级到您的Eclipse版本支持的版本。

另外,请记住您正在实施的TLD版本。标签名称已从v1.1略微更改为v2.0(即,info现在description taglib上的tag并且不是{{1}}下的有效元素,很多元素名称现在包含连字符)。 Eclipse不能容忍拼写错误的TLD标记名称。

TLD 2.0 (jsp-version 2.0) Reference

TLD 2.1 (jsp-version 2.3) Reference

答案 14 :(得分:0)

另一方面,如果您只处理java源代码并且正在从没有触及的大型项目中获取这些错误,那么您可以关闭Eclipse中的验证。设置位于Preferences-&gt; Web-&gt; JSP Files-&gt; Validation

答案 15 :(得分:0)

对我来说,只要我尝试使用新版本的eclipse就会出现此错误。显然,新的eclipse重置了M2_REPO变量,我在Marker视图中得到了所有标记库错误(有时会出现ejb验证错误)。

更新M2_REPO变量以指向实际的maven存储库位置后,需要2-3个项目 - &gt;清理迭代以使一切正常。

有时,有一些xml验证错误(ejb)以及此标记库错误。手动更新相应的XML文件,启动* .xsd文件查找并解析xml验证错误。发布此文章后,标签库错误也会消失。

答案 16 :(得分:0)

你需要了解API和实现总是有两件事(请注意以下代码的gradle格式)

compile group:'javax.servlet.jsp.jstl', name:'javax.servlet.jsp.jstl-api', version:'1.2.1'

compile group:'org.glassfish.web', name:'javax.servlet.jsp.jstl',version:'1.2.1'

所以如果你正在使用一个没有jstl支持的servlet容器,那么它当然不能同时提供它们,我犯的一个错误就是我只放了第一个,但如果你使用的是完整的堆栈应用程序服务器即glassfish然后glassfish将已经内部。

答案 17 :(得分:0)

我在使用Tomcat 6.0和Eclipse时遇到了同样的问题,我尝试了一些我朋友建议的东西,它对我有用。 可以在此处找到我提出的问题和我的回复评论的链接:

JSTL Tomcat 6.0 Cannot find the taglib descriptor Error

如果这解决了您的“无法找到taglibrary描述符”问题,请告诉我。

答案 18 :(得分:0)

我遇到了与STS(springtool源套件)相同的问题。

在STS下,右键单击项目,而不是“属性”,“项目构面”,而不是在窗口右侧单击“运行时”选项卡,并选中“VMware vFabric tc Server(...)” ,然后单击“应用”,工作区刷新后应该没问题。

答案 19 :(得分:0)

我遇到了与MyEclipse和Eclipse 6.6.0相同的问题。它在每个

中都排列了uri值

<%@ taglib prefix="s" uri="/struts-tags"%>。 我通过转到'Project / MyEclipse / Web / Tag Libraries'并将Struts 1.2 Tiles Tags的默认TLD前缀设置为's'来修复它。我还必须在“Project / MyEclipse / Web /配置工作区设置... /标签库”下执行相同的操作。

答案 20 :(得分:-1)

将jstl.jar替换为jstl1.2.jar解决了tomcat 7.0的问题

答案 21 :(得分:-4)

我也遇到了同样的问题。确保在Eclipse和Tomcat工作目录中具有相同版本的JSTL,即在\webapps\examples\WEB-INF\liblib文件夹中。