【问题标题】:Why should Jersey 1.x conflitct with Jersey 2.x?为什么 Jersey 1.x 会与 Jersey 2.x 冲突?
【发布时间】:2017-11-17 09:19:22
【问题描述】:

我一直在阅读各种使用 Jersey HTTP 客户端包的 Java 库,我应该小心,因为它们使用 Jersey 2.x,如果我的类路径中已经有 Jersey 1.x,它可能会导致一些冲突。

但是,Jersey 项目在合并到 Glassfish 项目时更改了组 ID 和包名称,从版本 2.x 开始。

由于包名不同,会有什么冲突?如果我的部署中有 Jersey 1.x,则将使用这些类,因为 Glassfish 运行时提供的 Jersey 2.x 是完全不同的类,具有不同的名称。

同样,如果我的可部署对象中有 Jersey 1.x,并且出现了一些依赖项并添加了 Jersey 2.x,我可能遇到的唯一问题是:如果没有部署描述符,Glassfish 将使用其版本的图书馆,而不是提供的图书馆。但无论如何,应该不会出现问题,因为我的类路径中有 Jersey 1.x 和 2.x,对吧?

请指教,我错过了什么吗?有什么大惊小怪的?

【问题讨论】:

  • 假设版本 2 中的类 x 具有版本 1 中相同方法的改进版本......编译器到底是如何知道你想使用哪一个?它们的路径相同,它们的类名和签名也相同
  • 嗯,不,很明显,Jersey 在 2.x 中完全更改了包名称,对吧?这是我研究后发现的,至少。那么,什么冲突,它们是不同的类。
  • 总是如果你加载同一个包的不同版本,你就有冲突的风险
  • 它们实际上是完全不同的包,你没看我写的吗?不同的maven groupIds,不同的包:Jersey 1.x com.sun.jersey,带有基础包com\sun\jersey; Jersey 2.x org.glassfish,带有基本包 org\glassfish。您要么试图聪明地玩,而不是说出您的实际意思,要么不知道 Java 类加载器是如何工作的。
  • Jersey 实现 的冲突并不像 JAX-RS API 那样大。 Jersey 2.x 将使用 JAX-RS 2,而 Jersey 1.x 将使用 JAX-RS 1。一些 API 已从 JAX-RS 1 更改为 JAX-RS 2,您将面临的大多数问题是 NoSuchMethodErrors 和AbstractMethodErrors 由于类差异(例如 javax.ws.rs.core.Application)和 JAX-RS 2 类尝试使用不在该类的 JAX-RS 1 版本上的方法。这些是您将面临的问题。例如stackoverflow.com/q/28509370/2587435

标签: java jakarta-ee jersey glassfish


【解决方案1】:

是的,你应该!

当您的项目附加了不受您控制的依赖项时,请务必三思。

如您所说,从 1.x 到 2.x,它们已从 sun 命名空间移动到 glassfish 命名空间。

在 1.x 中他们使用 JEE6 版本的 JAX-RS,在 2.x 中他们使用 JEE7 版本的 JAX-RS。这是一个大问题。比如javax.ws.rs.core.Application在不同版本的球衣中使用是不同的,不能以相同的方式使用。

Jesey 2.x 使用 JEE 7。在 JEE 7 版本中,javax.ws.rs.core.Application

Jesey 1.x 使用 JEE 6。在JEE 6 版本的javax.ws.rs.core.Application 中只有

  • getClasses()
  • getClass()

但是getProperties() 没有定义。 https://jersey.github.io/apidocs/1.19.1/jersey/javax/ws/rs/core/Application.html 这可能会导致错误,例如 NoSuchMethodError https://docs.oracle.com/javase/7/docs/api/java/lang/NoSuchMethodError.html 这只是一种无能。我敢肯定,如果你深入挖掘,你会发现更多。

不仅是命名空间,底层实现也改变了日志。是的 glassfish 运行时加载了球衣。但是您可能会遇到麻烦,因为尽管指定了提供范围,但不同的工件名称可能会导致不一致。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2021-03-03
    • 2021-07-04
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    相关资源
    最近更新 更多