Неудачный импорт в компиляции JSP на лету - PullRequest
3 голосов
/ 10 марта 2010

У нас есть большая установка веб-приложений, использующая Apache / Tomcat / Jasper и jboss. В среде разработки JSP компилируются на лету. К сожалению, есть один конкретный пакет, который не может импортировать компиляция на лету. Для некоторых классов использование полных ссылок вместо импорта работает, но не для всех. Все рассматриваемые классы находятся в одной банке (nonEjb.jar). Предварительная компиляция JSP работает хорошо, но, конечно, очень больно делать это каждый раз, когда нам нужно изменить один из затронутых файлов. Эта проблема существует уже довольно давно, и мне бы очень хотелось ее решить, поскольку я собираюсь сделать какую-то работу в пострадавшем районе.

Вот небольшая тестовая страница. Не удается для первого импорта. Импортируемые два класса очень похожи, единственным существенным отличием является их размещение в пакете. (И да, я убедился, что объявления пакетов верны для обоих классов.)

<%@ page contentType="text/html; charset=utf-8" %>
<%@ page errorPage="/error.jsp" %>

<%@ page import="com.elementk.lms.product.otr.OtrProviderType" %>
<%@ page import="com.elementk.lms.product.course.CourseType" %>

<html>
<body>
<hr>
Displaying the page...
<br>
<%= OtrProviderType.B24x7_PROVIDER.getId() %> value
<br>
<%= CourseType.SELF_STUDY.getId() %> value
</hr>
</body>
<html>

Результат:

09 Mar 2010 21:29:40,555 ERROR [K] [RequestTimingFilter.doFilter:65] Unable to compile class for JSP:

An error occurred at line: 6 in the generated java file
The import com.elementk.lms.product.otr cannot be resolved

Я получаю ту же ошибку, если удаляю импорт и полностью определяю ссылку (как com.elementk.lms.product.org.OtrProviderType).

Что может быть причиной того, что компилятор JSP обнаружил один из классов, но не другой?

Ответы [ 2 ]

3 голосов
/ 22 апреля 2010

Мы наконец определили, почему это происходит. По-видимому, компилятор на лету не различает регистр, и пакет com.elementk.lms.product содержит класс с именем Otr. Компилятор не смог определить разницу между пакетом "com.elementk.lms.product.otr" и классом "com.elementk.lms.product.Otr". Это объясняет, почему в сообщении об ошибке указывается только «com.elementk.lms.product.otr», даже если исходный импорт был «com.elementk.lms.product.otr.OtrProviderType».

Нам пришлось исправить, по сути, избежав проблемы: мы переименовали пакет.

0 голосов
/ 10 марта 2010

Где находится nonEjb.jar? Ошибка компиляции предполагает, что он не находится в пути к классам (я предполагаю, что имя пакета / класса на 100% правильно и доступно в этом JAR-файле).

Он должен быть как минимум в Webapp/WEB-INF/lib, чтобы JSP распознал его. Альтернативное расположение - Tomcat/lib, но это требует полного административного контроля над сервером, и файл JAR будет доступен всем развернутым веб-приложениям на сервере приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...