JasperReports 6.20.0适配Jakarta EE 9方案及兼容版本咨询
问题解决指南:Spring 6 + Jakarta EE 下 JasperReports 与 Shiro 适配问题
一、JasperReports 支持 Jakarta EE 的版本与发布时间
- 从JasperReports 6.21.0开始,官方完成了对 Jakarta EE API 的迁移,该版本发布于2023年5月24日。
- 6.20.0及更早版本仍基于
javax.servletAPI,这也是你升级到6.20.0后依然报错的核心原因——PdfServlet未实现jakarta.servlet.Servlet接口。
二、适配方案
1. JasperReports 适配步骤
- 升级JasperReports至6.21.0或更高版本,修改Maven依赖:
<dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.21.0</version> </dependency> - 检查并排除依赖树中残留的
javax.servlet-api依赖,避免API冲突:<dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.21.0</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </exclusion> </exclusions> </dependency>
2. Shiro 适配步骤
- Shiro 1.x系列(包括1.10.0)均基于
javax.servlet,需升级至Shiro 2.0.0及以上版本,该版本完全迁移到Jakarta EE API,ShiroFilter会实现jakarta.servlet.Filter接口。修改Maven依赖:<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>2.0.1</version> <!-- 或最新稳定版 --> </dependency> - 若暂时无法升级Shiro 2.x,可尝试在WildFly中启用
javax.servlet到jakarta.servlet的类转换,但此方法属于临时 workaround,存在兼容性风险,不推荐长期使用。
3. 通用注意事项
- 确保
web.xml使用Jakarta EE的命名空间和版本,替换旧的javax命名空间:<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" version="5.0"> <!-- 配置内容 --> </web-app> - 检查所有第三方依赖,确保没有同时引入
javax.servlet-api和jakarta.servlet-api,避免类加载冲突。
内容的提问来源于stack exchange,提问作者A622
相关产品推荐
相关产品推荐

