繁体   English   中英

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

[英]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的这个问题,我的方法如下:

  • 右键单击包浏览器中的项目,然后选择“导入...”
  • 接受默认选择“文件系统”并按“下一步”
  • 在From目录行中按“Browse”,转到你的tomcat安装并找到webapps / examples / WEB-INF / lib文件(我有tomcat 6,其他版本的Tomcat可能有路径webapps / jsp-examples / WEB- INF / lib目录)。 进入路径后按OK。
  • 单击jstl.jar和standard.jar以激活复选框
  • 在Into行文件夹中单击Browse并选择库文件夹。 我在项目中使用/ 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执行相同的操作

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

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

我做过上面提到的所有事情,但仍然遇到了这个错误。 事实证明我使用的是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。

我有同样的问题,条纹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论坛的原始帖子; 我看到的那个是在这一个之后整整一天发布的。

我今天解决了这个问题。

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

我希望它有所帮助。

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

  1. 选择Project并右键单击。
  2. 单击属性。
  3. 单击库选项卡。
  4. 点击“添加罐子”。
  5. 为您的错误添加相关的jar。

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

  1. 的jstl.jar
  2. standard.jar

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

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

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

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

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

您只需转到构建路径 - >添加库,并为库类型添加选择“服务器运行时”。 单击Next并选择要添加到类路径的服务器运行时,如果jstl.jar和standard.jar位于服务器的类路径中,问题就会消失。

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

JSTL Tomcat 6.0找不到taglib描述符错误

如果这解决了您的“无法找到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标记名称。

TLD 2.0(jsp-version 2.0)参考

TLD 2.1(jsp-version 2.3)参考

我和STS(springtool源代码套件)有同样的问题。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM