[英]eclipse : Can not find the tag library descriptor for “/struts-tags”
[英]Eclipse “cannot find the tag library descriptor” for custom tags (not JSTL!)
我有一个可以用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支持论坛上问过这个问题,没有任何有用的结果。
在Eclipse Helios中,项目属性中的“Java EE Module Dependencies”已替换为“Deployment Assembly”。
因此,为了解决Eclipse Helios的这个问题,我的方法如下:
这解决了这个问题,但如果你想检查“部署程序集”中发生了什么,再次打开项目属性,选择“部署程序集”,你会看到已将标准.jar和jstl.jar添加到WEB- INF / lib文件夹。
这是我的问题以及我如何解决它...
我做过上面提到的所有事情,但仍然遇到了这个错误。 事实证明我使用的是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。
我有同样的问题,条纹taglib uri显示为未找到。 我正在使用Indigo和Maven,当我检查Properties-> Java Build Path-> Order&Export选项卡时,我发现(在新项目结账时)由于某种原因未选中“Maven Dependencies”复选框。 只需检查该框并执行Maven clean安装即可清除所有错误。
我想知道为什么Eclipse不假设我想在构建路径中使用我的Maven依赖项...
事实证明,原因是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中编辑这些“性质”?
遇到同样的问题,我正在使用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/
当我试图在我的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"
我转到Project Properties - > Targeted Runtimes,然后检查我正在使用的服务器(Geronimo 3.0)。 大多数人都会使用Tomcat。 这解决了我的问题。 希望能帮助到你!
很大程度上取决于它是什么类型的项目。 WTP的JSP支持要求JSP文件位于WEB-INF文件夹(src / web的父级)的同一文件夹下,然后将其视为“/”以查找TLD,或者将项目元数据设置为帮助它知道root的位置(通过部署程序集在动态Web项目中完成)。 您是如何引用TLD文件的,以及JSP文件位于何处?
也许我错过了Eclipse论坛的原始帖子; 我看到的那个是在这一个之后整整一天发布的。
我今天解决了这个问题。
我希望它有所帮助。
我遇到了同样的问题。 这就是我为解决这个问题所做的工作。
检查F:\\apache-tomcat-7.0.21\\webapps\\examples\\WEB-INF\\lib
的两个库:
我正在使用Spring STS插件和Spring webmvc模板项目。 我必须首先安装Maven m2e插件: http : //www.eclipse.org/m2e/
然后清理项目。 在Project -> Clean...
如果您的tld位于类路径上,通常位于WEB-INF目录下,则以下两个提示应解决此问题(无论您的环境设置如何):
确保tLD中的<uri>
和jsp页面的taglib指令中的uri匹配。 tld的<uri>
元素是标记库的唯一名称。
如果tld没有<uri>
元素,Container将尝试使用taglib指令中的uri属性作为实际TLD的路径。 例如,我可以在WEB-INF文件夹中有一个自定义tld文件,并使用此tld的路径作为JSP中的uri值。 但是,这是一种不好的做法,应该避免,因为这些路径将被硬编码。
您只需转到构建路径 - >添加库,并为库类型添加选择“服务器运行时”。 单击Next并选择要添加到类路径的服务器运行时,如果jstl.jar和standard.jar位于服务器的类路径中,问题就会消失。
我使用Tomcat 6.0和Eclipse遇到了同样的问题,我尝试了一些我朋友建议的东西,它对我有用。 可以在此处找到我提出的问题和我的回复评论的链接:
如果这解决了您的“无法找到taglibrary描述符”问题,请告诉我。
您需要了解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然后玻璃鱼将已经在里面。
对我来说,只要我尝试使用新版本的eclipse,就会出现此错误。 显然,新的eclipse会重置M2_REPO
变量,并且我在Marker
视图中得到了所有标记库错误(有时会出现ejb验证错误)。
更新M2_REPO
变量以指向实际的maven存储库位置后,需要2-3个Project - > Clean迭代才能使一切正常运行。
有时,有一些xml验证错误(ejb)以及此标记库错误。 手动更新相应的XML文件,启动* .xsd文件查找并解析xml验证错误。 发布这个,标签库错误也消失了。
另一方面,如果您只是处理java源代码并且正在从没有触及的大型项目中获取这些错误,那么您可以在Eclipse中关闭验证。 设置位于Preferences-> Web-> JSP Files-> Validation下
我在MyEclipse和Eclipse 6.6.0上遇到了同样的问题。 它在每一个方面都是红色的
<%@ taglib prefix="s" uri="/struts-tags"%>
。 我通过转到'Project / MyEclipse / Web / Tag Libraries'并将Struts 1.2 Tiles Tags的默认TLD前缀设置为's'来修复它。 我还必须在“Project / MyEclipse / Web /配置工作区设置... /标签库”下执行相同的操作。
此错误可能来自几个不同的来源。 当Eclipse未实现TLD文档中设置的JSP规范版本时,会出现一个案例(在此问题的其他答案中未提及)。 Eclipse版本通常在实现较新的servlet和JSP规范方面落后长达一年。 例如,请参阅此Eclipse错误 。
在这种情况下,您的Web应用程序可能在最新版本的Tomcat中正常运行,但Eclipse仍可能会抱怨缺少TLD。 短期解决方案(忽略Eclipse中的错误)是将JSP版本降级到您的Eclipse版本支持的版本。
另外,请记住您正在实施的TLD版本。 标签名称从v1.1略微改变为v2.0(即, info
现在是taglib
description
,并且不是tag
下的有效元素,许多元素名称现在包含连字符)。 Eclipse不能容忍拼写错误的TLD标记名称。
我和STS(springtool源代码套件)有同样的问题。
在STS下,右键单击项目,而不是“属性”,“项目构面”,而不是在窗口右侧单击“运行时”选项卡,并选中“VMware vFabric tc Server(...)”,然后单击“应用”,工作区刷新后应该没问题。
将jstl.jar替换为jstl1.2.jar解决了tomcat 7.0的问题
我也遇到了同样的问题。 确保在Eclipse和Tomcat工作目录中具有相同版本的JSTL,即在\\webapps\\examples\\WEB-INF\\lib
和lib
文件夹中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.