![](/img/trans.png)
[英]Tomcat 6/7, Java 8: Can't compile JSP: [various types] cannot be resolved
[英]Tomcat uses a Java 8 SDK but won't compile JSP with Java 8 language feature. How to fix it?
我想我正在查看當前問題的 Tomcat 配置問題。 我正在為 Tomcat 8.5.8 開發 Java Servlet 和 JSP 應用程序,並且已經開始使用 Java 8 語言功能(特別是方法引用和流)。 在我運行 jdk1.8.0_211 的本地機器上,新代碼可以正常工作,在運行時按預期方式編譯 JSP。
在我們的測試服務器 (RH Linux) 上,新的 JSP 無法編譯(但應用程序的其余部分可以運行)。 錯誤是
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 135 in the jsp file: /jsp/directory/page.jsp
Method references are allowed only at source level 1.8 or above
我自己沒有設置服務器,但它運行了一些 Java 8 版本,並且具有相同的 Tomcat 版本(8.5.8),所以我懷疑某處有一個配置文件告訴它以舊語言編譯 JSP等級。 (證據是它知道方法引用是什么但拒絕編譯它;一個異常而不是一個錯誤。)
告訴 Tomcat 在舊語言級別編譯 JSP 的配置可能隱藏在哪里?
根據https://tomcat.apache.org/tomcat-8.0-doc/jasper-howto.html ,
實現 Jasper 的 servlet 使用全局 $CATALINA_BASE/conf/web.xml 中的 init 參數進行配置。
compilerSourceVM - 源文件與什么 JDK 版本兼容? (默認值:1.7) compilerTargetVM - 生成的文件與什么 JDK 版本兼容? (默認值:1.7)
舉個例子,如果你的web.xml
文件包含以下代碼,它會將 JSP 編譯到 1.8 語言級別:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<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>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
我在使用 JDK1.8 和 Tomcat9.0 時遇到了這個問題,並瀏覽了所有谷歌。
我的解決辦法:重裝Tomcat9,非常非常清楚,Start Ok!
Tomcat 中的某些東西崩潰了,我們不知道!!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.