WAR 库是否可见 and/or 在同一 Java EE 容器中跨 Web 应用程序共享?

Are WAR libraries visible and/or shared across web applications in same Java EE container?

当我看到这个 "The container put jar files inside WEB-INF/lib into its classpath"

时,我正在阅读 "Head First Servlets and JSPs" 中的 war 部署

我的问题是:

  1. 据我了解,类路径是跨jvm共享的-我听说过类路径级别,但我不太了解,也没有找到对它的引用-,所以这意味着一个项目中包含的 jar 文件对其他项目可见?

  2. 这是否也意味着如果第三个应用程序正在访问这个库而我忘记包含这个 jar,我们可能会在部署在 2 个不同应用程序中的同一个 jar 的 2 个版本之间发生冲突在其 lib 文件夹中?

多年来我一直在部署 Web 应用程序,但我没有遇到任何这些问题....所以我怀疑我误解了什么

正如 Gimby 评论的那样,这些库被放置在 webapp 的类路径中,由 webapp 的 ClassLoader 处理。每个 webapp 都有自己的 ClassLoader,它们不能看到或混淆彼此的库。

案例二。容器确实有自己的类路径(和 ClassLoader(s)),这意味着如果容器 和 Web 应用程序 加载了相同的库,您可能会收到极其混乱的错误消息告诉你 "foo.bar.SomeClass cannot be cast into foo.bar.SomeClass".