Контейнеру Maven Embedded Jetty не удается загрузить библиотеки тегов: невозможно инициализировать TldLocationsCache

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

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

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

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

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

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

веб.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>

And the test module 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>

Here's the stacktrace from the error:

    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

Любая помощь приветствуется!

камера


person Community    schedule 24.01.2009    source источник


Ответы (1)


Отчет об ошибке отправлен: http://jira.codehaus.org/browse/CARGO-651

person Community    schedule 27.01.2009