2011-09-28 104 views
3

在我們的Web應用程序重新升級爲常青藤以進行構建管理後,我遇到了一點不尋常的錯誤,該構建管理還包括更新所有主要圖書館也參與其中。雖然我們正在設法通過我們的單元測試,當我們部署web應用到Tomcat並嘗試導航到它在我們得到以下錯誤的布勞爾:無法從JAR文件中讀取TLD「META-INF/stripes.tld」錯誤

org.apache.jasper.JasperException: /index.jsp(1,1) /layout/taglibs.jsp(2,77) Unable to read TLD "META-INF/stripes.tld" from JAR file "file:/Library/Tomcat/apache-tomcat-6.0.32/webapps/cga/WEB-INF/lib/stripes-1.5.6.jar": org.apache.jasper.JasperException: Failed to load or instantiate TagExtraInfo class: net.sourceforge.stripes.tag.ErrorsTagExtraInfo

我檢查通常的嫌疑人,並證實jar文件位於正確的位置,tld文件存在於jar中,等等。同樣,搜索錯誤只顯示有限數量的退貨,主要與具有相同錯誤的郵件列表問題有關。我已經閱讀了這篇文章,並嘗試了那些沒有太多運氣的解決方案。

任何有關可能導致此錯誤的想法?

是我收到

完整的錯誤軌跡如下:

org.apache.jasper.JasperException: /index.jsp(1,1) /layout/taglibs.jsp(2,77) Unable to read TLD "META-INF/stripes.tld" from JAR file "file:/Library/Tomcat/apache-tomcat-6.0.32/webapps/cga/WEB-INF/lib/stripes-1.5.6.jar": org.apache.jasper.JasperException: Failed to load or instantiate TagExtraInfo class: net.sourceforge.stripes.tag.ErrorsTagExtraInfo 
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40) 
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407) 
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:88) 
    org.apache.jasper.compiler.Parser.processIncludeDirective(Parser.java:300) 
    org.apache.jasper.compiler.Parser.parseIncludeDirective(Parser.java:333) 
    org.apache.jasper.compiler.Parser.parseDirective(Parser.java:442) 
    org.apache.jasper.compiler.Parser.parseElements(Parser.java:1397) 
    org.apache.jasper.compiler.Parser.parse(Parser.java:130) 
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255) 
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:103) 
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:185) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:347) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:327) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:314) 
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:326) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

回答

3

這實際上了一段時間追下去的錯誤消息並不完全反映實際的問題是什麼,但在一個螺母如果在部署的JAR文件和部署的JAR文件之間存在類衝突,則會出現類似的聲音錯誤(即「無法從JAR文件讀取TLD」META-INF/*。tld「」) Tomcat本身。事實證明,這是我的錯誤,因爲存在兩個相互衝突的文件(javax.servlet.jsp-api-2.2.1.jar和el-api-1.0.jar)。

由於這個問題似乎彈出不少,這裏有一些故障排除提示:

  • 仔細檢查你正在部署什麼,以確保沒有什麼意外,如果你使用的是依賴管理確保依賴關係的依賴不會導致你的問題。
  • 仔細檢查以確保您已清除以前版本的所有內容並再次部署,令人驚訝的是,這讓我不止一次引起了一些挫折感。
  • 請不要將servlet-api.jar直接包含在您自己的庫中,而是使用帶有可變路徑的外部JAR - guide
  • 不要期望JAR文件按照您的預期命名,也不要期望它們不包含您認爲不會包含的內容,如果必須,請打開它們以仔細檢查內容。