61

我有一个 Java EE 项目,它使用 Ant 构建良好,完美地部署到 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 支持论坛上问过这个问题,但没有任何有用的结果。

4

22 回答 22

28

在 Eclipse Helios 中,项目属性中的“Java EE Module Dependencies”已替换为“Deployment Assembly”。

所以为了用 Eclipse Helios 解决这个问题,我这样做的方式如下:

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

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

于 2011-01-20T06:34:38.760 回答
19

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

我已经完成了上面每个人提到的所有事情等,但仍然出现此错误。原来我使用的是不正确的http://java.sun.com/jsp/jstl/fmturi http://java.sun.com/jsp/jstl/core

尝试将 uri 从上面切换为:

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

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

于 2010-11-01T21:33:50.100 回答
14

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

我想知道为什么 Eclipse 不认为我想要构建路径中的 Maven 依赖项......

于 2011-11-23T10:57:34.433 回答
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 中编辑这些“性质”?

于 2009-10-19T08:28:54.490 回答
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 一样,一切都已经在 J​​Boss 中工作了。

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

于 2011-11-21T18:46:00.590 回答
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"

我转到 Project Properties -> Targeted Runtimes,然后检查了我正在使用的服务器(Geronimo 3.0)。大多数人会使用Tomcat。这解决了我的问题。希望能帮助到你!

于 2013-03-21T14:45:55.050 回答
3

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

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

于 2009-08-18T16:43:59.290 回答
3

我今天解决了这个问题。

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

我希望它有所帮助。

于 2009-09-25T15:08:05.507 回答
2

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

  1. jstl.jar
  2. 标准.jar
于 2011-09-03T15:25:57.467 回答
2

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

  1. 选择项目并右键单击。
  2. 点击属性。
  3. 单击库选项卡。
  4. 单击“添加罐子”。
  5. 为您的错误添加相关的 jar。
于 2013-06-14T21:49:38.317 回答
1

您可以简单地转到 Build Path -> Add Libraries 并为要添加的库类型选择“Server Runtime”。单击下一步并选择要添加到类路径的服务器运行时,如果 jstl.jar 和 standard.jar 在您的服务器的类路径中,问题就会消失。

于 2011-11-11T05:24:51.820 回答
1

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

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

于 2013-02-10T23:51:35.513 回答
1

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

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

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

于 2013-09-17T07:21:03.103 回答
0

MyEclipse 和 Eclipse 6.6.0 也有同样的问题。它在每个

<%@ taglib prefix="s" uri="/struts-tags"%>. 我通过转到“Project/MyEclipse/Web/Tag Libraries”并将 Struts 1.2 Tiles 标签的默认 TLD 前缀设置为“s”来修复它。我还必须在“Project/MyEclipse/Web/Configure workspace settings.../Tag Libraries”下做同样的事情。

于 2010-05-07T17:31:13.473 回答
0

我对 STS(springtool 源套件)也有同样的问题。

在STS下,右键点击项目,比“Properties”,“Project Facets”,比在窗口右边点击“runtime”选项卡,勾选“VMware vFabric tc Server(...)”,然后点击“应用”,工作区刷新后应该可以了。

于 2012-02-29T19:00:53.433 回答
0

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

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

让我知道这是否解决了您的“找不到标签库描述符”问题。

于 2012-04-04T20:08:32.127 回答
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 将把它们都放在里面。

于 2014-01-29T05:39:19.523 回答
0

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

更新M2_REPO变量以指向实际的 Maven 存储库位置后,需要 2-3 次 Project -> Clean 迭代才能使一切正常运行。

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

于 2014-08-12T06:24:08.903 回答
0

另一方面,如果您只使用 java 源代码,并且在正在运行的大型项目中从不涉及的内容中获取这些错误,则可以在 Eclipse 中关闭验证。设置位于 Preferences->Web->JSP Files->Validation 下

于 2014-10-13T21:06:52.433 回答
0

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

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

另外,请记住您正在实施的 TLD 版本。标签名称从 v1.1 到 v2.0 略有变化(即,info现在description打开taglib并且不是 下的有效元素tag,许多元素名称现在包含连字符)。Eclipse 不允许拼写错误的 TLD 标记名称。

TLD 2.0 (jsp-version 2.0) 参考

TLD 2.1 (jsp-version 2.3) 参考

于 2016-11-16T21:17:50.540 回答
-1

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

于 2015-10-18T14:06:04.397 回答
-4

我也面临同样的问题。确保您在 Eclipse 和 Tomcat 工作目录(即文件夹中)\webapps\examples\WEB-INF\lib中具有相同版本的 JSTL。lib

于 2014-03-27T12:13:57.470 回答