Tomcat использует Java 8 SDK, но не будет компилировать JSP с функцией языка Java 8.Как это исправить? - PullRequest
0 голосов
/ 28 июня 2019

Я думаю, что я смотрю на проблему конфигурации Tomcat с моей текущей проблемой.Я занимаюсь разработкой приложения Java Servlet и JSP для Tomcat 8.5.8 и начал использовать возможности языка Java 8 (в частности, ссылки на методы и потоки).На моей локальной машине под управлением jdk1.8.0_211 новый код работает, компилируя JSP во время выполнения, как это должно быть.

На нашем тестовом сервере (RH Linux) новый JSP не может скомпилироваться (но остальная частьприложение работает).Ошибка:

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 135 in the jsp file: /jsp/directory/page.jsp
Method references are allowed only at source level 1.8 or above

Я сам не настраивал сервер, но он запускает какую-то сборку Java 8 и имеет ту же версию Tomcat (8.5.8), поэтому я подозреваю, что есть файл конфигурациигде-то это говорит о компиляции JSP на более старом уровне языка.(Доказательством является то, что он знает, что такое ссылка на метод , но отказывается его компилировать; исключение, а не ошибка.)

Где может скрываться конфигурация, которая указывает Tomcat на компиляцию JSPна старшем уровне языка?

1 Ответ

1 голос
/ 28 июня 2019

Per https://tomcat.apache.org/tomcat-8.0-doc/jasper-howto.html,

Сервлет, который реализует Jasper, настроен с использованием параметров инициализации в вашем глобальном $ CATALINA_BASE / conf / web.xml.

compilerSourceVM - Что такое версия JDKисходные файлы совместимы с?(Значение по умолчанию: 1.7) compilerTargetVM - С какой версией JDK сгенерированные файлы совместимы?(Значение по умолчанию: 1.7)

Например, если ваш файл web.xml содержит следующий код, он скомпилирует JSP до уровня языка 1.8:

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>

    <init-param>
        <param-name>compilerSourceVM</param-name>
        <param-value>1.8</param-value>
    </init-param>
    <init-param>
        <param-name>compilerTargetVM</param-name>
        <param-value>1.8</param-value>
    </init-param>

    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>
...