是否可以在新的Jakarta EE应用程序(使用jakarta包)中使用旧的Java EE库(使用javax包)?如果没有商标问题,所有的API都将向后兼容。是否有任何运行时库或构建工具可以让它们一起工作?是否是将旧库分叉并手动更新的唯一解决方案?我特别关注Servlet API,但验证、持久性、Web服务和邮件也可能会让我头疼。
jakarta
javax
2guxujil1#
您可以使用Eclipse Transformer项目将旧版Java EE兼容jar(使用javax.*导入)转换为使用jakarta.*导入的jar。转换器负责一些额外的事情,比如重命名配置文件中的常量等。这是一项正在进行的工作,但已经做得很好了。
javax.*
jakarta.*
whlutmcx2#
正如您提到的,除了商标更改之外,API是兼容的,因此一种解决方案是围绕它们构建 Package 器,将新库委托给旧库。可能并不总是简单的,但根据您的用例,它可以工作。For example:
public class LegacyServlet implements jakarta.servlet.Servlet { private final javax.servlet.Servlet delegate; public LegacyServlet(javax.servlet.Servlet delegate) { this.delegate = delegate; } @Override public void service(jakarta.servlet.ServletRequest req, jakarta.servlet.ServletResponse resp) { delegate.service(new LegacyServletRequest(req), new LegacyServletResponse(resp)); } }
tf7tbtn23#
这么多简短的回答,使这听起来像一个快速,容易,琐碎的任务。我的任务要求我将依赖项(jar)加载到我的SpringBoot 3/Spring 6/JDK 17环境中,并操作控制器(必须从我不能修改的jar中以二进制形式加载的类),这些控制器期望javax. http. ServletRequests。我的控制器接收到jakarta.http.ServletRequests,我需要做的是将该jakarta.* 请求有效地更改为javax.* 类型,以将其发送到委托控制器。事实证明,这是一个比听起来复杂得多的问题,当然也是一个比一行或两行StackOverflow响应所建议的更大的问题。
3条答案
按热度按时间2guxujil1#
您可以使用Eclipse Transformer项目将旧版Java EE兼容jar(使用
javax.*
导入)转换为使用jakarta.*
导入的jar。转换器负责一些额外的事情,比如重命名配置文件中的常量等。这是一项正在进行的工作,但已经做得很好了。
whlutmcx2#
正如您提到的,除了商标更改之外,API是兼容的,因此一种解决方案是围绕它们构建 Package 器,将新库委托给旧库。可能并不总是简单的,但根据您的用例,它可以工作。
For example:
tf7tbtn23#
这么多简短的回答,使这听起来像一个快速,容易,琐碎的任务。我的任务要求我将依赖项(jar)加载到我的SpringBoot 3/Spring 6/JDK 17环境中,并操作控制器(必须从我不能修改的jar中以二进制形式加载的类),这些控制器期望javax. http. ServletRequests。我的控制器接收到jakarta.http.ServletRequests,我需要做的是将该jakarta.* 请求有效地更改为javax.* 类型,以将其发送到委托控制器。
事实证明,这是一个比听起来复杂得多的问题,当然也是一个比一行或两行StackOverflow响应所建议的更大的问题。