WildFly RestEasy 版本混乱

WildFly RestEasy Version confusion

我想使用 RestEasy 构建 REST API。生成的文件需要部署在WildFly应用服务器中。

我遇到了以下 SO 问题中描述的问题: AsynchronousDispatcher error

标记的解决方案告诉我,将依赖项设置为 "provided"。据我了解,该库未包含在我的 war 文件中,而是直接从应用程序服务器获取...

这不就错了吗?

我的想法是构建一个自包含的 war 文件,其中包含我需要的版本中所有需要的库。

当从应用服务器提供时,我确实从那里获得了当前可用的版本。我对版本一无所知...当有人想更新服务器上的 RestEasy 库时,它可能会破坏我的应用程序。

我不确定我是漏掉了什么还是做错了什么?

Java EE 的一大优势是朝着 API 发展,而不必担心实施问题。 Java EE 容器提供 API 和 API 的实现。如果您包含实现依赖项,则可能会发生以下两种情况之一。

  1. 您的依赖项将被忽略,因此将它们包含在您的部署中毫无意义。

  2. 您所包含的依赖项与服务器期望的依赖项之间会发生冲突。这可能是这样的:

    • ClassCastException 因为它在 class 路径上找到两个相同的 class。
    • MethodNotFoundException因为版本不匹配
    • 其他各种冲突问题

朝着 API 而不是实现的方向发展还允许您轻松地在 Java EE 兼容容器之间切换,而无需对部署进行最小的更改。 API 通常是向后兼容的,因此版本升级不是什么大问题。

如果您想使用胖 WAR(包括实现)而不是瘦 WAR(不包括实现),那么 servlet 容器可能是更好的解决方案。 WildFly 确实有 servlet only 下载。不过,我鼓励您相信容器对实现依赖项做正确的事情:)。通常只有在升级 Java EE 版本时才会出现升级问题。即便如此,它通常还是很安全的。