簡體   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