Jetty: прекомпилируйте JSP с помощью ant
Я пытаюсь предварительно скомпилировать мои файлы JSP с помощью Jetty, поэтому мне не нужно поставлять компилятор с моим проектом Jetty. Я использую Ant для достижения этой цели, но появляется ошибка, и я не знаю, как ее решить.
taglibs.jsp (4,62) PWC6188: абсолютный uri: http://java.sun.com/jsp/jstl/core не может быть разрешен ни в файле web.xml, ни в файлах jar, развернутых с помощью этого приложения
Я использую следующий скрипт ant, как упомянуто в другом вопросе Stackru: прекомпилируйте jsps в классы для Jetty8, используя ant
<property name="jetty.home" value="C:/jetty-distribution-8.1.8.v20121106" />
<path id="compile.jspc">
<fileset dir="${jetty.home}">
<include name="lib/servlet-api-*.jar" />
<include name="lib/jsp/*.jar" />
</fileset>
</path>
<target name="jspc" depends="compile">
<taskdef classname="org.apache.jasper.JspC" name="jasper2" classpathref="compile.jspc" />
<jasper2 validateXml="false"
uriroot="WebContent"
addWebXmlMappings="true"
webXmlFragment="WebContent/WEB-INF/generated_web.xml"
compilerSourceVM="1.6"
compilerTargetVM="1.6"
outputDir="build/gen-src"
verbose="9" />
</target>
Что может пойти не так и вызвать эту ошибку? Дважды проверил classpath и все необходимые файлы.jar загружены. Не имеет ничего общего с версией JSTL, упомянутой в других сообщениях на форуме.
С наилучшими пожеланиями, пользователь2255297
ОБНОВЛЕНИЕ: содержание Taglibs.jsp
<%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld" %>
<%@ taglib prefix="stripesDynamic" uri="http://stripes.sourceforge.net/stripes-dynattr.tld" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%-- Short hand for the context root. --%>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
2 ответа
Прекомпиляция файлов JSP в сочетании с ANT и TagLibs была невозможна. Я решил перейти с ANT на MAVEN и смог успешно прекомпилировать файлы с помощью maven-jetty-jspc-plugin. Также есть возможность запускать части скрипта ANT в maven.
Наиболее распространенная причина этой ошибки - конфликтующие файлы, которые есть у веб-контейнера и у вашего веб-приложения. WEB-INF/lib
есть.
Несоответствие версий между Jetty и вашим проектом является наиболее распространенным источником этой ошибки.
С Jetty 8.x вы используете Servlet API 3.0.
Убедитесь, что вы используете следующие версии в вашем WEB-INF/lib
- JSTL 1.2
- EL 2.2
- JSP 2.2
- Сервлет API 3.0