Tomcat7迁移至Tomcat9时Gradle构建JSP报'<>' operator不支持1.7以下源码错误
报错原因
报错指向的_jspx_imports_classes相关代码是Tomcat Jasper引擎编译JSP时自动生成的代码,并非业务手写代码。报错核心原因是Java编译阶段使用的源码兼容级别低于1.7,而钻石运算符<>是Java 7版本才引入的语法特性,低版本编译规则不识别该语法。
排查解决步骤
- 检查Gradle全局Java编译级别配置
打开项目根目录下的build.gradle文件,添加/修正Java兼容版本配置:
若使用老版本Gradle,也可直接写为:java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 }sourceCompatibility = 1.8 targetCompatibility = 1.8 - 配置JSP编译器的源码兼容级别
JSP由Tomcat的Jasper引擎独立编译,需要单独配置编译参数:- 若使用Gradle Tomcat插件(如
com.bmuschko.tomcat)做本地调试,在插件配置块添加如下配置:
tomcat { jasper { compilerSourceVM = "1.8" compilerTargetVM = "1.8" } }- 若打War包部署到独立Tomcat 9,需要修改Tomcat的
conf/web.xml文件,找到JspServlet的配置项,添加两个初始化参数:
<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> </servlet> - 若使用Gradle Tomcat插件(如
- 执行清理构建
运行./gradlew clean build命令(Windows环境执行gradlew.bat clean build),验证报错是否消失。 - 可选排查:如仍存在报错,检查全局Gradle配置文件
~/.gradle/gradle.properties(Windows路径为C:\Users\<你的用户名>\.gradle\gradle.properties)中是否存在覆盖sourceCompatibility的配置,如有则删除或者修改为1.8版本。
内容的提问来源于stack exchange,提问作者Parag Goel
相关产品推荐
相关产品推荐

