Comment exécuter Java 8 lambda dans des fichiers JSP

Sep 25 2020

Il s'agit d'un projet Java JSP avec gestion Maven et exécutant Jetty localement.

J'ai un problème où je reçois cette erreur lorsque vous essayez d'exécuter lambda dans les .jspffichiers: Lambda expressions are allowed only at source level 1.8 or above.

Ma configuration:

  • Dans la structure de projet dans Intellij IDEA, j'ai défini le SDK de projet et le langage de projet sur Java 8.
  • Le niveau de langue du module est 8 - Lambdas, annotations de type, etc.
  • Utilisation <maven.compiler.source>1.8</maven.compiler.source>et<maven.compiler.target>1.8</maven.compiler.target>
  • La version du bytecode du projet est définie sur 1.8
  • Dernière version de Jetty (v9.4.31.x)
  • Le projet utilise le jetty-jspc-maven-pluginplugin où j'ai défini sourceVersionet targetVersionà 1,8 dans<configuration>

Y a-t-il quelque chose qui me manque, ou Java 8 n'est-il tout simplement pas possible avec JSP / jspc

Réponses

JoakimErdfelt Sep 25 2020 at 20:59

L'existant https://github.com/jetty-project/embedded-jetty-jspa un exemple de configuration de compilerSourceVMet compilerTargetVMpour permettre à vos *.jspfichiers d'utiliser les fonctionnalités de Java 8, comme celles de lambda.

En gros, vous configurez votre 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");

Je suis allé de l'avant et j'ai ajouté un lambda.jsp qui utilise un simple lambda dans un JSP pour le prouver. (lambda mélangé avec JspWriter de jsp est plutôt compliqué, ce n'était pas le meilleur choix d'exemple avec le recul)