[英]java object serialization for hosting on aws tomcat elastic beanstalk
[英]AWS Elastic Beanstalk with tomcat 8.5 and java 8 lambda x cannot be resolved to a variable
我正在尝试使用 tomcat 8.5 和 java 8 将 java web 应用程序部署到 AWS Elastic Beanstalk。我的 java 应用程序包含 lambda 表达式,但它没有编译,错误x 无法解析为一个变量我已经检查了我的环境和: System.getProperty("catalina.base"); System.getProperty("java.version");
System.getProperty("catalina.base"); System.getProperty("java.version");
它提供了正确的 java 环境/usr/share/tomcat8
和1.8.0_181
我已经尝试通过添加以下内容在我的应用程序 web.xml 中使用用户源 1.8
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>compiler</param-name>
<param-value>modern</param-value>
</init-param>
<init-param>
<param-name>compilerSourceVM</param-name>
<param-value>1.8</param-value>
</init-param>
<init-param>
<param-name>compilerTargetVM</param-name>
<param-value>1.8</param-value>
</init-param>
<init-param>
<param-name>suppressSmap</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
我还尝试使用 server-update.config container_commands: replace-config: command: cp .ebextensions/web.xml /usr/share/tomcat8/web.xml
对 AWS 进行自定义配置container_commands: replace-config: command: cp .ebextensions/web.xml /usr/share/tomcat8/web.xml
但没有任何效果,问题是:我如何告诉 tomcat 使用 java 1.8。
编辑:示例代码我测试过的一个非常简单的代码
<%!
String str = "";
%>
<%
List<String> test = new ArrayList<>();
test.add("1");
test.add("2");
test.add("3");
test.add("4");
test.add("5");
test.stream().forEach(x -> str += x + " - ");
%>
我自己遇到过这个问题,我相信答案是:你不能。 也就是说,Tomcat 确实在 1.8 下运行,但您看到的问题是它不能(在 Elastic Beanstalk 上)在 JSP 中编译1.8 级代码。
为了编译 JSP,Tomcat 需要两个组件:一个 JSP 编译器(生成 Java 代码)和一个 Java 编译器(生成字节码)。 两个参数compilerSourceVM
和compilerTargetVM
为这两个compilerTargetVM
设置语言级别。
以下只是我最好的猜测,但它似乎在实践中得到证实:
如果Java环境中有Java编译器,Tomcat就可以使用; 否则它依赖于嵌入式编译器。 Tomcat 8.x 面向 Java 1.7,因此其嵌入式编译器是 1.7 编译器。 您的开发环境几乎肯定包含 1.8 编译器,因此您提供的配置将正常工作。 但是Elastic Beanstalk配置的是Java环境,缺少编译器,所以Tomcat 8.x支持的最高语言级别是1.7。
Tomcat 9 面向 Java 1.8,因此包含一个 1.8 级的嵌入式编译器; 无论运行时环境中是否有 Java 编译器,它都应该能够支持您的配置。 但是 Elastic Beanstalk(在撰写本文时)不支持 Tomcat 9,因此您很可能只能在 JSP 中使用 1.7 支持。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.