在服务器机制上部署 war

Deploying war on server mechanism

当我开发任何 Web 应用程序时,我添加了许多我的代码依赖于它们的 jar。 我想知道当我在服务器上部署 war 时服务器或容器如何使用这些罐子, 如果我直接将它们放在服务器的模块上,这将有利于发布或部署吗?!

在服务器类路径上使用 jar 依赖项没有任何优势。这将迫使您依赖服务器本身,这在处理持续交付时不是一个好主意。

顺便说一句,你应该知道每个 war 文件在部署时都有自己的类路径,所以如果你部署一些 war,让我们假设在 Tomcat 服务器上,它将使用它自己的类路径,其中包含必要的 jar。容器(Tomcat 在本例中)对这些罐子一无所知,但您的应用程序会。

当您的代码被执行时,容器将在您的 war 中查找依赖的 jar 是否可用。如果它无法在您的 war 中找到相关的 jar,那么容器将遍历它的树以查看它是否可以在容器本身的某处找到依赖项。通过配置,可以反转,因此最后检查 war。

war 应该是独立的,依赖的 jar 在 war 的 WEB-INF/lib 文件夹中。配置容器(可能是默认值)首先检查 war。这保持隔离,有助于保持应用程序随着时间的推移稳定。例如,容器可能已更新,但您的应用不需要更新。

将 war 之外的依赖 jar 部署到共享文件夹的容器内某处,可能会使这些依赖 jar 对 所有 部署的应用程序可见 and/or 容器本身。这最终会导致 jar 版本冲突和 class 加载器问题。不要这样做!