Java8迁移Java21:Javax转Jakarta后PageContext编译报错求助
解决Java 8→Java 21迁移中javax.servlet.jsp.PageContext找不到的问题
全局排查残留的javax引用
用IDE全局搜索遍历项目所有文件(JSP、Java类、XML配置、自定义标签文件等),确认是否还有javax.servlet.jsp.PageContext的残留引用。比如JSP脚本片段、EL表达式里的隐式对象引用,或是自定义标签类中继承/引用了旧的javax类,这些都容易被遗漏。排查依赖传递引入的javax包
执行mvn dependency:tree生成依赖树,检查是否有第三方依赖偷偷引入了javax.servlet.jsp相关旧依赖。如果发现,在对应依赖节点下添加排除规则:<dependency> <!-- 第三方依赖坐标 --> <groupId>xxx</groupId> <artifactId>xxx</artifactId> <version>xxx</version> <exclusions> <exclusion> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> </exclusion> </exclusions> </dependency>更新Maven插件版本并配置Java 21编译参数
确保maven-compiler-plugin和maven-war-plugin版本支持Java 21与Jakarta EE,推荐配置:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>21</source> <target>21</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin> </plugins> </build>清理Maven缓存并重新构建
执行mvn clean install -U,清理本地Maven仓库缓存文件,强制更新所有依赖,避免旧的javax类文件残留干扰编译。确认容器版本兼容性
如果用Tomcat作为运行容器,必须升级到Tomcat 10.1.x及以上版本(Tomcat 10+才完全支持Jakarta EE 9+规范)。旧版Tomcat依赖javax包,会导致类路径冲突。检查JSP编译插件(若使用)
若项目用maven-jspc-plugin预编译JSP,需将版本升级到支持Jakarta的2.0.0及以上,避免插件内部引用旧的javax类。
内容的提问来源于stack exchange,提问作者Sharath Nair
相关产品推荐
相关产品推荐

