我有一个使用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支持论坛上提出了这个问题,没有任何有用的结果。
答案 0 :(得分:28)
在Eclipse Helios中,项目属性中的“Java EE模块依赖关系”已替换为“部署程序集”。
因此,为了解决Eclipse Helios的这个问题,我采用的方法如下:
这解决了这个问题,但是如果你想检查“部署程序集”中发生了什么,再次打开项目属性,选择“部署程序集”,你会看到已经添加了standard.jar和jstl.jar到WEB-INF / lib文件夹。
答案 1 :(得分:18)
这是我的问题以及我如何解决它......
我已经完成了上面提到的所有事情,但仍然遇到了这个错误。事实证明我使用的http://java.sun.com/jsp/jstl/fmt
和http://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)
我今天解决了这个问题。
我希望它有所帮助。
答案 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
中的两个库:
答案 9 :(得分:2)
我遇到了同样的问题。 这就是我为解决这个问题所做的工作。
答案 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目录下,则以下两个提示应解决此问题(无论您的环境设置如何):
确保TLD中的<uri>
和jsp页面的taglib指令中的uri匹配。 tld的<uri>
元素是标记库的唯一名称。
如果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标记名称。
答案 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\lib
和lib
文件夹中。