Eclipse “无法找到自定义标签的标签库描述符”(不是 JSTL!)
-
13-09-2019 - |
题
我有一个 Java EE 项目,它使用 Ant 构建得很好,完美地部署到 JBoss,并且运行没有任何问题。这个项目包括几个 风俗 标签库(这不是 JSTL!),它们也可以毫无困难地工作。
问题出在 Eclipse IDE (Ganymede) 上:在每个使用自定义标签的 JSP 文件中,JSP 解析器都会将 taglib include 行标记为以下错误:
Cannot find the tag library descriptor for (example).tld
这也会导致标签库的每次使用都会被标记为错误,并且由于 IDE 没有它们的定义,因此无法检查标签参数等。
我们完美运行的 JSP 文件充满了红色错误,我的眼睛开始灼痛。
我如何简单地告诉 Eclipse,“您正在寻找的标签库描述符是“src/web/WEB-INF/(example)-taglib/(example).tld”?
我已经在 Eclipse 支持论坛上提出了这个问题,但没有得到任何有用的结果。
解决方案 4
原来,原因是,这个项目没有被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文件,版本比较对旧项目的配置,找到病因。
我能找到添加这些是通过编辑项目文件,但重新打开该项目后,唯一的办法,一切都奇迹般地工作。通过pribeiro引用的设置,以上,没有必要的,因为项目已经符合默认设置。
这两个pribeiro和nitind的回答给了我的想法来跳过我的搜索,谢谢。
是否有从UI中编辑这些“性质”的方法吗?
其他提示
在 Eclipse Helios 中,项目属性中的“Java EE 模块依赖项”已替换为“部署程序集”。
因此,为了使用 Eclipse Helios 解决这个问题,我的方法如下:
- 右键单击包资源管理器中的项目并选择“导入...”
- 接受默认选择“文件系统”并按“下一步”
- 在“From”目录行中按“浏览”,转到您的 tomcat 安装并找到文件 webapps/examples/WEB-INF/lib (我有 tomcat 6,其他版本的 Tomcat 可能具有路径 webapps/jsp-examples/WEB- INF/lib)。进入路径后,按“确定”。
- 单击 jstl.jar 和 standard.jar 旁边的复选框以激活复选框
- 在“进入文件夹”行中,单击“浏览”并选择库文件夹。我在项目中使用/lib。
- 点击“完成”
- 在 Package Explorer 视图中右键单击项目并选择属性(或按 Alt + Enter)
- 单击“Java 构建路径”
- 单击“添加 Jar”,单击您的项目,文件夹 lib,选择 jstl.jar,按确定
- 单击“添加 Jar”,单击您的项目,文件夹 lib,选择 standard.jar,按确定
- 按“确定”关闭属性对话框
- 单击“问题”视图并选择消息“类路径条目 .../jstl.jar 将不会被导出或发布。可能会导致运行时 ClassNotFoundExceptions。”。
- 右键单击它并选择“快速修复”。
- 接受默认的“将关联的原始类路径条目标记为发布/导出依赖项”,然后按“完成”。
- 对 standard.jar 执行相同操作
这样就解决了问题,但是如果你想检查“部署程序集”中发生了什么,请再次打开项目属性,选择“部署程序集”,你会看到standard.jar和jstl.jar已被添加到WEB中- INF/lib 文件夹。
这是我的问题,我是如何解决它?
我已经做了一切每个人都上面提到的等等,但仍然得到这个错误。原来我使用http://java.sun.com/jsp/jstl/fmt
和http://java.sun.com/jsp/jstl/core
的URI的哪个是不正确的。
尝试从上述切换URI来:
http://java.sun.com/jstl/fmt
http://java.sun.com/jstl/core
此外,还要确保你在你的类路径中引用正确的罐子。
我有同样的问题与一条纹标签库URI表示作为未找到。我用靛蓝和Maven,当我检查属性 - > Java构建路径 - >订单和出口标签,我发现(上一个新项目结账)的“Maven依赖”复选框选中是因为某些原因。简单地检查框,并做了Maven的干净安装清除所有的错误。
我不知道为什么Eclipse不承担我要在构建路径我的Maven依赖...
遇到同样的问题,我使用Maven的,所以我说这个到POM在我的web项目:
<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-粗野,分辨/
当我试图包括在我的JSP JSTL核心库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
我在Eclipse(靛蓝)以下错误:
Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"
我去项目属性 - >目标运行时,然后检查了服务器我是用(Geronimo的3.0)。大多数人会使用Tomcat。这解决了我的问题。希望它可以帮助!
我今天解决了这个问题。
- 将输出目录更改为 WEB-INF/classes 文件夹。(项目/属性/Java 构建路径,默认输出文件夹)
- 分配模块依赖项。(项目/属性/Java EE 模块依赖项)它们将被复制到 WEB-INF/lib 文件夹,Eclipse 也会在其中查找标签库定义。
我希望它有帮助。
在很大程度上取决于它是什么样的项目。 WTP的JSP支持两种预期JSP文件是这就是WEB-INF文件夹中(src /网络,它将然后当作“/”找到顶级域名),或有项目的元数据设立的父同一个文件夹下帮助它知道那里根(通过部署大会为你做一个动态Web项目)。你是如何指TLD文件,其中JSP文件在什么位置?
也许我错过了原来的职位到Eclipse论坛;我看到了一个在这一个后贴一整天。
检查两个库 F:\apache-tomcat-7.0.21\webapps\examples\WEB-INF\lib
:
- jstl.jar
- 标准.jar
我遇到了同样的问题。这就是我为解决该问题所做的事情。
- 选择项目并右键单击。
- 单击属性。
- 单击库选项卡。
- 单击“添加罐子”。
- 为您的错误添加相关的 jar。
您可以简单地去构建路径 - >添加库和库类型添加选择“服务器运行时”。点击下一步,选择一个服务器运行时添加到类路径和问题消失,如果的jstl.jar和standard.jar是在你的服务器的类路径。
我使用Spring STS插件和弹簧webmvc模板项目。我必须先安装的Maven插件M2E: http://www.eclipse.org/m2e/
然后清理项目。下Project -> Clean...
如果您的 tld 位于类路径上(通常位于 WEB-INF 目录下),则以下两个提示应该可以解决问题(无论您的环境设置如何):
确保
<uri>
TLD 中的 uri 与 jsp 页面 taglib 指令中的 uri 相匹配。这<uri>
tld 的元素是标签库的唯一名称。如果顶级域名没有
<uri>
元素时,容器将尝试使用 taglib 指令中的 uri 属性作为实际 TLD 的路径。例如我可以在 WEB-INF 文件夹中有一个自定义 tld 文件,并使用该 tld 的路径作为 JSP 中的 uri 值。然而,这是一种不好的做法,应该避免,因为路径将被硬编码。
我与MyEclipse的和Eclipse 6.6.0同样的问题。它在逢红内衬的URI值
<%@ taglib prefix="s" uri="/struts-tags"%>
。
我转到“项目/ MyEclipse的/网络/标签库”,并设置默认TLD前缀对Struts 1.2 Tiles标记为“S”固定它。我也必须做同样的在“项目/ MyEclipse的/网络/配置工作区设置... /标签库”。
我有同样的问题与STS(springtool源套件)。
在STS,右键单击该项目,不是“属性”,“项目构面”,不是在“运行”选项卡上单击窗口的右侧,并勾选“的VMware的vFabric TC服务器(...)” ,并单击“应用”,它应该是工作空间刷新后确定。
以及您需要了解总有两件事情的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'
因此,如果您使用的是servlet容器没有JSTL支持那么当然它不会提供他们两个,我犯了一个错误是,我只放第一位,但如果你使用全栈的应用服务器即GlassFish的,则Glassfish将具有两者已经内部。
对于我来说,每当我试图使用Eclipse的新版本出现此错误。显然,新的Eclipse复位M2_REPO
变量和我在Marker
视图(有时与EJB验证错误)中的所有标签库错误。
更新M2_REPO
变量指向实际Maven仓库的位置后,需要2-3个项目 - >清洁迭代使一切工作正常。
和有时,存在与此标记库错误沿着一些XML验证错误(EJB)。手动更新相应的XML文件,启动* .xsd文件查找和XML验证错误得到解决。发布此,标签库错误也消失了。
在另一方面,如果你只从事Java源代码,并都可以从东西你不要在正在一个大项目触摸这些错误,你可以关闭验证在Eclipse中。的设置是首选项下>基于Web> JSP文件 - >验证
我在使用Tomcat 6.0和Eclipse同样的问题,我尝试了一些东西,我的朋友建议,它为我工作。 该链接的问题,我问我的回复评论说可以在这里找到:
让我知道这样能否解决您“无法找到标记库描述符”的问题。
可以从几个不同的来源产生此错误。当Eclipse不执行JSP规范的TLD文件中设定的版本的一个情况下(在其他的答案没有提到这个问题)发生。 Eclipse的版本身后长达一年的时间通常滞后于实施新的Servlet和JSP规范。请参阅此Eclipse的错误例如
在这种情况下,你的web应用可以运行在Tomcat中的最新版本的罚款,但是Eclipse可能仍抱怨缺少的TLD。短期内溶液(短忽略Eclipse中的错误的)是到JSP版本凸点向下到您的Eclipse版本支持一个。
此外,请记住您所用的TLD的版本。标签名称从V1.1略有改变至v2.0(即info
现在description
上taglib
并没有受到tag
有效的元素,许多元素名称现在包含一个连字符)。 Eclipse有拼写错误的TLD标签名称没有气度。
取代的jstl.jar到jstl1.2.jar解决该问题为Tomcat 7.0
我也面临同样的问题。请确保您有在Eclipse和Tomcat的工作目录JSTL的版本相同,即在\webapps\examples\WEB-INF\lib
和lib
文件夹中。