Как запустить лямбда-выражение Java 8 в файлах JSP
Это проект Java JSP с управлением Maven и локальным запуском Jetty.
У меня есть проблема , когда я получаю эту ошибку при попытке запустить лямбда в .jspfфайлах: Lambda expressions are allowed only at source level 1.8 or above.
Моя установка:
- В структуре проекта в Intellij IDEA я установил Project SDK и язык проекта на Java 8.
- Уровень языка модуля - 8 - лямбды, аннотации типов и т. Д.
- Использование
<maven.compiler.source>1.8</maven.compiler.source>и<maven.compiler.target>1.8</maven.compiler.target> - Версия байт-кода проекта установлена на 1.8.
- Последняя версия Jetty (v9.4.31.x)
- В проекте используется
jetty-jspc-maven-pluginплагин, который я установилsourceVersionиtargetVersionна 1,8 дюйма<configuration>
Есть ли что-то, что мне не хватает, или Java 8 просто невозможна с JSP / jspc
Ответы
Существующий https://github.com/jetty-project/embedded-jetty-jspесть пример настройки compilerSourceVMи, compilerTargetVMчтобы разрешить вашим *.jspфайлам использовать функции Java 8, такие как лямбда.
В основном вы настраиваете свой JettyJspServlet
// Create / Register JSP Servlet (must be named "jsp" per spec)
ServletHolder holderJsp = new ServletHolder("jsp", JettyJspServlet.class);
holderJsp.setInitOrder(0);
holderJsp.setInitParameter("logVerbosityLevel", "DEBUG");
holderJsp.setInitParameter("fork", "false");
holderJsp.setInitParameter("xpoweredBy", "false");
holderJsp.setInitParameter("compilerTargetVM", "1.8");
holderJsp.setInitParameter("compilerSourceVM", "1.8");
holderJsp.setInitParameter("keepgenerated", "true");
servletContextHandler.addServlet(holderJsp, "*.jsp");
Я пошел дальше и добавил lambda.jsp, который использует простую лямбду в JSP, чтобы доказать это. (лямбда, смешанная с jsp JspWriter, довольно сложна, это был не лучший выбор для примера)