java - 如何在 JSP 文件中运行 Java 8 lambda
问题描述
这是一个带有 Maven 管理的 Java JSP 项目,并在本地运行 Jetty。
尝试在.jspf
文件中运行 lambda 时出现此错误:Lambda expressions are allowed only at source level 1.8 or above
.
我的设置:
- 在 Intellij IDEA 的项目结构中,我已将项目 SDK 和项目语言设置为 Java 8。
- 模块语言级别为 8 - Lambda、类型注释等。
- 使用
<maven.compiler.source>1.8</maven.compiler.source>
和<maven.compiler.target>1.8</maven.compiler.target>
- 项目字节码版本设置为 1.8
- 最新版本的 Jetty (v9.4.31.x)
- 该项目正在使用
jetty-jspc-maven-plugin
我设置的插件sourceVersion
和targetVersion
1.8 in<configuration>
有什么我遗漏的吗,或者 JSP / jspc 根本不可能使用 Java 8
解决方案
现有的https://github.com/jetty-project/embedded-jetty-jsp有一个设置compilerSourceVM
和compilerTargetVM
允许您的*.jsp
文件使用 Java 8 功能(如 lambda)的示例。
基本上你配置你的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");
我继续添加了一个lambda.jsp,它在 JSP 中使用一个简单的 lambda 来证明这一点。(lambda 与 jsp 的 JspWriter 混合相当复杂,事后看来它不是示例的最佳选择)
推荐阅读
- android - Android 电视盒在 10 秒内关闭我的应用程序
- java - Android LocationManager 中 NMEA 语句的来源
- mongodb - 在 mongod.conf 中启用安全性后,Mongod 正在恢复
- tsql - TSQL 行号按引用和日期拆分
- c - 无法理解如何创建没有参数的过程原型
- java - 如何在没有命令行的情况下从 java 代码制作 war 文件?
- c# - ML.NET - 特征列“特征”的架构不匹配:预期向量
, 得到向量 - mysql - 选择 STR_TO_DATE(('20190919 114121', "%Y-%m-%d %T");
- unix - Linux 运行级别和 chkconfig
- java - (初学者)- 如何编写十进制计算并打印结果?