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