如果我的应用程序有一个依赖 Jar,最好将它放在 war 文件 lib 目录中还是将它放在全局应用程序服务器(如 Tomcat)lib 目录中?通过使用一种方法而不是另一种方法,我可以获得什么?
磁盘空间浮现在脑海中,但我们生活在磁盘空间便宜的时代。内存使用有区别吗?比我更有经验的人可以列出这两种选择的优缺点吗?
如果我的应用程序有一个依赖 Jar,最好将它放在 war 文件 lib 目录中还是将它放在全局应用程序服务器(如 Tomcat)lib 目录中?通过使用一种方法而不是另一种方法,我可以获得什么?
磁盘空间浮现在脑海中,但我们生活在磁盘空间便宜的时代。内存使用有区别吗?比我更有经验的人可以列出这两种选择的优缺点吗?
一般来说,WAR 自包含会好得多,这样您就不必依赖容器配置。它也使部署更加容易。因此,如果可以,请尝试将库放入 WAR 中。
但是,我在将库安装到容器时遇到了一些情况。例如,
我们有一些被每个 webapp 使用的内部库,它们非常庞大。我们将它们安装到容器中,这样所有的 webapps 都使用相同的版本,它也节省了内存和磁盘空间。
安装在 WEB-INF/lib 中的库对容器不可用。如果您需要在 context.xml 中引用这些(如参考资料中定义的 JDBC 驱动程序),您必须将它们放在 server/lib 中。
如果要将所有 webapps 的 log4j 日志发送到同一个文件,则必须将 log4j jar 放在 server/lib 中。否则,每个 webapp 都使用自己的记录器。
如果您想使用容器的资源管理功能——例如连接到 SQL 数据库并为其提供 JNDI 查找和连接池——那么容器软件本身将需要访问库和驱动程序来管理资源。
否则,您可能不想将它们安装在服务器 /lib 目录中并假设它们在那里并且可以工作,因为不同的 Web 应用程序可能有细微不同的版本要求。
有关 Catalina 实现的类加载器层次结构的深入描述,您应该查看 Tomcat 的类加载器HOW-TO。这将帮助您了解何时使 jar 可用于容器、所有 web 应用程序、仅单个 web 应用程序......以及放置它们的位置。