Java 8 lambda'yı JSP dosyalarında nasıl çalıştırırım
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ıyorsourceVersionvetargetVersion1.8 in<configuration>
Eksik bir şey var mı, yoksa Java 8 JSP / jspc ile mümkün değil mi
Yanıtlar
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)