如何同时使用Java EE和Jakarta EE依赖项?

62lalag4  于 2023-06-04  发布在  Java
关注(0)|答案(3)|浏览(259)

是否可以在新的Jakarta EE应用程序(使用jakarta包)中使用旧的Java EE库(使用javax包)?
如果没有商标问题,所有的API都将向后兼容。是否有任何运行时库或构建工具可以让它们一起工作?是否是将旧库分叉并手动更新的唯一解决方案?
我特别关注Servlet API,但验证、持久性、Web服务和邮件也可能会让我头疼。

2guxujil

2guxujil1#

您可以使用Eclipse Transformer项目将旧版Java EE兼容jar(使用javax.*导入)转换为使用jakarta.*导入的jar。
转换器负责一些额外的事情,比如重命名配置文件中的常量等。这是一项正在进行的工作,但已经做得很好了。

whlutmcx

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));
  }
}
tf7tbtn2

tf7tbtn23#

这么多简短的回答,使这听起来像一个快速,容易,琐碎的任务。我的任务要求我将依赖项(jar)加载到我的SpringBoot 3/Spring 6/JDK 17环境中,并操作控制器(必须从我不能修改的jar中以二进制形式加载的类),这些控制器期望javax. http. ServletRequests。我的控制器接收到jakarta.http.ServletRequests,我需要做的是将该jakarta.* 请求有效地更改为javax.* 类型,以将其发送到委托控制器。
事实证明,这是一个比听起来复杂得多的问题,当然也是一个比一行或两行StackOverflow响应所建议的更大的问题。

相关问题