Java 8 lambda'yı JSP dosyalarında nasıl çalıştırırım

Sep 25 2020

Bu, Maven yönetimi içeren ve Jetty'yi yerel olarak çalıştıran bir Java JSP projesidir.

Ben de lambda çalıştırmak çalışırken bu hatayı alıyorum bir sorun var .jspfdosyalar: Lambda expressions are allowed only at source level 1.8 or above.

Kurulumum:

  • Intellij IDEA'daki proje yapısında Project SDK ve Project dilini Java 8 olarak ayarladım.
  • Modül dil seviyesi 8'dir - Lambdas, tür ek açıklamaları vb.
  • kullanılması <maven.compiler.source>1.8</maven.compiler.source>ve<maven.compiler.target>1.8</maven.compiler.target>
  • Proje bayt kodu sürümü 1.8 olarak ayarlandı
  • Jetty'nin son sürümü (v9.4.31.x)
  • Proje, jetty-jspc-maven-pluginayarladığım eklenti kullanıyor sourceVersionve targetVersion1.8 in<configuration>

Eksik bir şey var mı, yoksa Java 8 JSP / jspc ile mümkün değil mi

Yanıtlar

JoakimErdfelt Sep 25 2020 at 20:59

Var olan https://github.com/jetty-project/embedded-jetty-jsp, dosyalarınızın lambda's gibi Java 8 özelliklerini kullanmasına izin vermek için compilerSourceVMve kurulumuna bir örnek vardır .compilerTargetVM*.jsp

Temelde siz yapılandırırsınız 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");

Devam ettim ve bunu kanıtlamak için bir JSP içinde basit bir lambda kullanan bir lambda.jsp ekledim . (lambda'nın jsp'nin JspWriter ile karıştırılması oldukça karmaşıktır, arkadan bakışta en iyi örnek seçimi değildi)