【问题标题】:How to use Java EE and Jakarta EE together?如何同时使用 Java EE 和 Jakarta EE?
【发布时间】:2022-01-26 11:06:07
【问题描述】:

是否可以在新的 Jakarta EE 系统(带有 jakarta 导入)中使用旧的 Jave EE 库(带有 javax 导入)?

如果不是商标问题,所有 API 都将向后兼容。是否有任何可用的运行时库或构建工具可以让它们一起工作?分叉旧库并手动更新它们的唯一解决方案是什么?

我特别关注 servlet API,但验证、持久性和邮件也可能会咬我。

【问题讨论】:

  • 如果存在jakarta 导入,您可以尝试使用自定义类加载器,将javax 导入重定向到jakarta 导入。

标签: java servlets jakarta-ee java-ee-8


【解决方案1】:

您可以使用 Eclipse Transformer 项目将带有 javax.* 导入的旧 Java EE 兼容 jar 转换为使用 jakarta.* 导入的 jar。

转换器负责一些额外的事情,比如重命名配置文件中的常量等等。这是一项正在进行的工作,但已经做得很好了。

【讨论】:

    【解决方案2】:

    正如您提到的,API 是兼容的,除了商标更改外,因此一种解决方案是围绕它们构建包装器,将新库委托给旧库。可能并不总是直截了当,但根据您的用例,它可能会起作用。

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

    【讨论】:

    • 这将是相当多的工作,虽然例如Lombok 可以帮助生成所有方法。您还必须将库中所有接受或返回 javax 对象的内容都包装起来。
    • 注解不能这样做,不是吗?
    • 确实,它不适用于注释。如果你不介意我问,你为什么要这样做?无论您最终选择哪种解决方案,都可能需要更多的时间来实施,而不仅仅是更新库和对导入进行全部替换以将它们从 javax 更改为 jakarta。
    猜你喜欢
    • 2021-04-14
    • 1970-01-01
    • 2021-01-19
    • 2023-01-03
    • 2020-11-26
    • 1970-01-01
    • 2021-03-02
    • 2020-10-27
    • 1970-01-01
    相关资源
    最近更新 更多