Làm cách nào để chạy Java 8 lambda trong các tệp JSP
Đây là một dự án Java JSP với quản lý Maven và chạy Jetty cục bộ.
Tôi có một vấn đề mà tôi nhận được lỗi này khi cố gắng chạy lambda trong .jspftập tin: Lambda expressions are allowed only at source level 1.8 or above.
Thiết lập của tôi:
- Trong cấu trúc dự án trong Intellij IDEA, tôi đã đặt SDK dự án và ngôn ngữ dự án thành Java 8.
- Cấp độ ngôn ngữ của mô-đun là 8 - Lambdas, loại chú thích, v.v.
- Sử dụng
<maven.compiler.source>1.8</maven.compiler.source>và<maven.compiler.target>1.8</maven.compiler.target> - Phiên bản dự án bytecode được đặt thành 1.8
- Phiên bản mới nhất của Jetty (v9.4.31.x)
- Dự án đang sử dụng
jetty-jspc-maven-pluginplugin mà tôi đã đặtsourceVersionvàtargetVersionthành 1,8 in<configuration>
Có điều gì tôi đang thiếu không, hay Java 8 chỉ đơn giản là không thể với JSP / jspc
Trả lời
Hiện có https://github.com/jetty-project/embedded-jetty-jspcó một ví dụ về cách thiết lập compilerSourceVMvà compilerTargetVMcho phép các *.jsptệp của bạn sử dụng các tính năng của Java 8, như lambda.
Về cơ bản, bạn định cấu hình 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");
Tôi đã tiếp tục và thêm lambda.jsp sử dụng lambda đơn giản trong JSP để chứng minh điều đó. (lambda được trộn với JspWriter của jsp khá phức tạp, nó không phải là lựa chọn tốt nhất của ví dụ trong tầm nhìn xa)