2009-01-24 1 views
1

Я использую плагин Maven Cargo для запуска веб-контейнера Jetty для запуска некоторых интеграционных тестов в отдельном модуле проекта.Maven Embedded Jetty Container не может загрузить Taglib: невозможно инициализировать TldLocationsCache

Проблема, с которой я сражаюсь, возникает, когда я добавил taglibs в страницы jsp и попытался ударить их из интеграционных тестов. Когда молы пытается скомпилировать страницы он терпит неудачу с этой ошибкой:

org.apache.jasper.JasperException: Unable to initialize TldLocationsCache: null 

Веб-приложение отлично работает при запуске в установленном контейнере Tomcat или автономный Jetty пробежать мавенны в командной строке, поэтому я думаю, что проблема должна быть вниз, чтобы что-то делать с тем, как груз встраивает пристань, а затем, как причал компилирует приложение.

Я пробовал работать в разветвленных и некруглых режимах, добавляя taglibs к пути класса контейнера, явно определяя taglibs в web.xml и не имея там никакой конфигурации ... все безрезультатно.

Вот тестовый проект я использую для отладки:

web.xml

<?xml version='1.0' encoding='UTF-8'?> 
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 

<display-name>taglibs-test</display-name> 

<jsp-config> 
    <taglib> 
     <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri> 
     <taglib-location>/WEB-INF/tld/c.tld</taglib-location> 
    </taglib> 
</jsp-config> 

И тестовый модуль pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 

HTTP: //maven.apache.org/maven-v4_0_0.xsd ">

... 

<build> 

     <!-- Integration Test Embedded Servlet Container --> 
     <plugin> 
      <groupId>org.codehaus.cargo</groupId> 
      <artifactId>cargo-maven2-plugin</artifactId> 
      <configuration> 
       <wait>false</wait> 
       <container> 
        <containerId>jetty6x</containerId> 
        <type>embedded</type> 
        <log>${project.build.directory}/log</log> 
        <dependencies> 
         <dependency> 
          <groupId>javax.servlet</groupId> 
          <artifactId>jstl</artifactId> 
         </dependency> 
         <dependency> 
          <groupId>taglibs</groupId> 
          <artifactId>standard</artifactId> 
         </dependency> 
        </dependencies> 
        <systemProperties> 
         <DEBUG>true</DEBUG> 
        </systemProperties> 
       </container> 
       <configuration> 
        <properties> 
         <cargo.servlet.port>8090</cargo.servlet.port> 
         <cargo.logging>high</cargo.logging> 
        </properties> 
        <deployables> 
         <deployable> 
          <groupId>test</groupId> 
          <artifactId>web</artifactId> 
          <type>war</type> 
          <properties> 
           <context>taglibs-test</context> 
          </properties> 
         </deployable> 
        </deployables> 
       </configuration> 
      </configuration> 
      <executions> 
       <execution> 
        <id>start-container</id> 
        <phase>test-compile</phase> 
        <goals> 
         <goal>start</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>stop-container</id> 
        <phase>package</phase> 
        <goals> 
         <goal>stop</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Вот StackTrace от ошибки:

2009-01-24 13:53:06.766::WARN: /taglibs-test/index.jsp: 
org.apache.jasper.JasperException: Unable to initialize TldLocationsCache: null 
    at org.apache.jasper.compiler.TldLocationsCache.init(TldLocationsCache.java:253) 
    at org.apache.jasper.compiler.TldLocationsCache.getLocation(TldLocationsCache.java:224) 
    at org.apache.jasper.JspCompilationContext.getTldLocation(JspCompilationContext.java:526) 
    at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:422) 
    at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:492) 
    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1552) 
    at org.apache.jasper.compiler.Parser.parse(Parser.java:126) 
    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:211) 
    at org.apache.jasper.compiler.ParserController.parse(ParserController.java:100) 
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:155) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:276) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:264) 
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563) 

Я отслеживаюсь это вниз на следующие строки в TldLocationsCache Джаспер:

private void init() throws JasperException { 
     if (initialized) return; 
     try { 
      processWebDotXml(); 
      scanJars(); 
      processTldsInFileSystem("/WEB-INF/"); 
      initialized = true; 
     } catch (Exception ex) { 
      throw new JasperException(Localizer.getMessage(
        "jsp.error.internal.tldinit", ex.getMessage())); 
     } 
    } 

http://svn.apache.org/repos/asf/tomcat/jasper/tc6.0.x/src/share/org/apache/jasper/compiler/TldLocationsCache.java

Любые помощь очень ценится !!

кулачок отчет

ответ

Смежные вопросы