Невозможно прочитать ДВУ "META-INF / stripes.tld" из ошибки файла JAR - PullRequest
3 голосов
/ 28 сентября 2011

Я столкнулся с некоторой необычной ошибкой после серьезного обновления нашего веб-приложения до ivy для управления сборкой, которое также включало в себя обновление всех основных задействованных библиотек. В то время как нам удается пройти наши модульные тесты, когда мы развертываем веб-приложение в Tomcat и пытаемся перейти к нему в браузере, мы получаем следующую ошибку:

org.apache.jasper.JasperException: /index.jsp(1,1) /layout/taglibs.jsp(2,77) Невозможно прочитать TLD "META-INF / stripes.tld" из файла JAR "Файл: /Library/Tomcat/apache-tomcat-6.0.32/webapps/cga/WEB-INF/lib/stripes-1.5.6.jar": org.apache.jasper.JasperException: не удалось загрузить или создать экземпляр Класс TagExtraInfo: net.sourceforge.stripes.tag.ErrorsTagExtraInfo

Я проверил обычных подозреваемых и проверил, что файл JAR находится в правильном месте, что файл 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
    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)

1 Ответ

3 голосов
/ 28 сентября 2011

На самом деле это заняло некоторое время, чтобы отследить, так как сообщение об ошибке не полностью отражает реальную проблему, но в скорлупе это похоже на ошибку звучания (например, «Невозможно прочитать TLD» META-INF / *. Tld”Из файла JAR"), по-видимому, возникает, когда существует конфликт классов между одним из развернутых вами файлов JAR и тем, что развернуто с помощью самого Tomcat.Это оказалось причиной моей ошибки, так как было два файла (javax.servlet.jsp-api-2.2.1.jar и el-api-1.0.jar), которые конфликтовали.

Поскольку эта проблема всплывает довольно часто, вот пара советов по устранению неполадок:

  • Дважды проверьте, что вы развертываете, чтобы убедиться, что нет ничего неожиданного, если вы используетеменеджер зависимостей должен убедиться, что зависимость не вызывает у вас проблем.
  • Двойная проверка, чтобы убедиться, что вы удалили все из предыдущей версии и развернули снова. Удивительно, но это несколько раз вызывало у меня разочарование.
  • Не включайте напрямую servlet-api.jarв вашей собственной библиотеке, но лучше использовать внешний JAR с переменным путем - guide .
  • Не ожидайте, что JAR-файлы будут названы так, как вы ожидаете, иначе они не будут содержать то, чего, как вы думаете, они не имеют, если придется, откройте их, чтобы дважды проверить содержимое.
...