Spring boot 3 - Jakarta 和 Javax

问题描述 投票:0回答:4

在新的 Spring boot 3 发行说明中,他们告诉我们该版本将使用 Jakarta EE 9(名为

jakarta
的库)而不是 JEE(名为
javax
的库)。

他们建议开发人员在这篇

文章
中将导入的
javax
替换为jakarta

如果我有一个带有

javax
jakarta
库的 Spring Boot 应用程序,该应用程序可以工作并能够部署在 Jakarta 兼容服务器(例如 Tomcat 10)中吗?

非常感谢。

spring spring-boot tomcat
4个回答
14
投票

答案实际上取决于您使用的特定库以及它们如何相互交互,但一般来说,尝试混合 Java EE 和 Jakarta EE 将是一个坏主意。

举个例子,如果您正在编写 Spring MVC 应用程序,那么您将使用

DispatcherServlet
。在 Spring Framework 6 中,这将需要 Jakarta Servlet API。没有办法让它与
javax.servlet
对于其他 API 一起工作,如果您直接使用它们并且没有使用基于它们构建的 Spring 抽象,那么您可能会逃脱将它们放在你的类路径。我还是不推荐。


3
投票

升级到 SpringBoot 3、Tomcat 10 或任何需要 Jakarta EE 9 的系统时,将所有 javax 依赖项替换为 jakarta 依赖项总是更安全。这并不完全简单,但您可以使用 Eclipse Transformer 或类似工具实现自动化。

如果您的应用程序编译正常,那么我建议通过 Transformer 运行最终的 JAR 或 WAR。我在此博客中解释了如何执行此操作:升级到 Jakarta EE 10:使用 Eclipse Transformer 转换应用程序


1
投票

如果它对任何人有帮助,我可以确认问题。

为了处理安全漏洞,我将 POM 从 Spring 5.3.15 更新到 6.0.6,将 Spring Security 5.6.1 更新到 6.0.2。

我发现的第一个问题是 HttpServletRequest 不再兼容,至少如果您扩展 AbstractAuthenticationProcessingFilter 甚至更多。

基于此线程和其他线程,解决方案似乎是将 javax.servlet-api 替换为 jakarta.servlet-api 并更新所有受影响的导入。


0
投票

您可以尝试将网络应用程序而不是webapps放入webapps-javaee中,如https://tomcat.apache.org/migration-10.html#Specification_APIs

中所述

然后 TC10 将在 webapps 中创建一个新的 war 并像往常一样在 webapps 中解压它。我用我们的一些纯 TC8/9 应用程序进行了尝试,效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.