我正在升级我的 Maven 应用程序以使用 spring 6.x 从 5.x。 Spring 6.x 基于 Jakarta EE,所以我相应地更新了我的依赖项。但是对于 JasperReports,我在 web.xml 文件中定义了一个 servlet:
<servlet>
<servlet-name>PdfServlet</servlet-name><servlet-class>net.sf.jasperreports.j2ee.servlets.PdfServlet</servlet-class>
</servlet>
它是抛出错误:引起:java.lang.IllegalArgumentException:UT010009:类型类 net.sf.jasperreports.j2ee.servlets.PdfServlet 的 Servlet PdfServlet 没有实现 jakarta.servlet.Servlet。
同样,shiro 库也出现错误,错误:由:java.lang.IllegalArgumentException: UT010011: Filter ShiroFilter of type class org.apache.shiro.web.servlet.ShiroFilter does not implement jakarta.servlet.Filter.
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
当我尝试在 Wildfly 27 应用服务器上运行我的应用程序时。我正在使用 6.20.0 版本的 JasperReports 库和 1.10.0 版本的 shiro(核心、网络、ehcache 和 spring)。
哪个版本的 JasperReports 支持 Jakarta EE,或者什么时候发布支持 Jakarta EE 的最新版本,有什么解决方法的建议吗?
我已经将 JasperReports 库从 6.15.0 更新到 6.20.0
1 - 对于 JasperReports,您仍然可以将它与 Jakarta EE 10 一起使用,只需实现您的 propre servlet
2 - 对于 shiro,根据 Apache Shiro Jakarta EE Integration 将
jakarta
分类器添加到 pom.xml 中的依赖项,如下所示:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.11.0</version>
<classifier>jakarta</classifier>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.11.0</version>
<classifier>jakarta</classifier>
</dependency>
JasperReports 6.20.0 旨在与 Java 8 和更早版本的 Java EE 一起使用。但是,随着 Jakarta EE 9 的推出,API 和依赖项发生了一些变化,可能会导致兼容性问题。
这里有一些步骤可以让 JasperReports 与 Jakarta EE 9 一起工作:
确保您使用的是与 Java 8 兼容的最新版本的 JasperReports。
将以下依赖项添加到您的项目中:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0.1</version>
</dependency>
这些依赖项将提供 JasperReports 所需的必要 JAXB API。
如果您使用的是 Jakarta EE 9 应用程序服务器,您可能需要配置服务器以将这些依赖项包含在运行时类路径中。这通常可以通过将依赖项添加到服务器的共享库或模块来完成。
如果您遇到类路径冲突或缺少依赖项的任何问题,您可能需要对应用程序的部署配置执行额外的配置或调整。例如,您可能需要排除冲突的库或调整模块依赖关系。
请注意,虽然这些步骤可能有助于使 JasperReports 与 Jakarta EE 9 一起工作,但不能保证所有特性或功能都能按预期工作。有些问题可能需要对 JasperReports 库本身进行额外的更改或更新。