Wie führe ich Java 8 Lambda in JSP-Dateien aus?
Dies ist ein Java JSP-Projekt mit Maven-Management und lokaler Ausführung von Jetty.
Ich habe ein Problem, bei dem dieser Fehler auftritt, wenn ich versuche, Lambda in .jspfDateien auszuführen : Lambda expressions are allowed only at source level 1.8 or above.
Mein Setup:
- In der Projektstruktur in Intellij IDEA habe ich Project SDK und Project Language auf Java 8 gesetzt.
- Die Sprachstufe des Moduls beträgt 8 - Lambdas, Typanmerkungen usw.
- Verwenden von
<maven.compiler.source>1.8</maven.compiler.source>und<maven.compiler.target>1.8</maven.compiler.target> - Die Projektbytecode-Version ist auf 1.8 eingestellt
- Neueste Version von Jetty (v9.4.31.x)
- Das Projekt verwendet das
jetty-jspc-maven-pluginPlugin, das ich eingestellt habe,sourceVersionundtargetVersionauf 1,8 Zoll<configuration>
Fehlt mir etwas oder ist Java 8 mit JSP / jspc einfach nicht möglich?
Antworten
Die bestehende https://github.com/jetty-project/embedded-jetty-jspHier finden Sie ein Beispiel für die Einrichtung von compilerSourceVMund compilerTargetVM, damit Ihre *.jspDateien Java 8-Funktionen wie Lambda verwenden können.
Grundsätzlich konfigurieren Sie Ihre 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");
Ich habe eine lambda.jsp hinzugefügt , die ein einfaches Lambda in einer JSP verwendet, um dies zu beweisen. (Lambdas gemischt mit JspWriter von jsp ist ziemlich kompliziert, es war im Nachhinein nicht die beste Wahl für ein Beispiel)