![](/img/trans.png)
[英]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.