我见过很多教程和应用程序将他们的 jar 放在构建路径中,而其他人把它放在他们的 web-inf/lib 文件夹中,有什么显着的区别吗?两者的优缺点是什么?将某个 jar 放入 libs 文件夹并将 jar 放入构建路径中的指标是什么?
2 回答
带有 WEB-INF 文件夹的应用程序是 Web 应用程序。这意味着它将被打包为 WAR 文件并部署在服务器上。
如果您使用的是 Eclipse 之类的 IDE,并且您将项目导出为 WAR 文件,它将自动获取 lib 文件夹下的 jar 并将它们与 WAR 一起打包,这将使它们可用于在服务器上运行的应用程序(jar 下WEB-INF/lib 包含在应用程序类路径中)。
如果您只是将它们放在其他任何地方并将它们包含在构建路径中,那么当您导出项目时,您必须声明您希望构建路径中的 jar 也包含在内。
基本上,没有太大的区别,但是如果你知道你在运行时需要这个jar(即在将应用程序部署到服务器之后),最好把它放在WEB-INF/lib 文件夹下。
构建路径是什么意思?您使用的大多数 JAR 都需要在构建(编译)期间可用,因为您的代码依赖于它们 - 否则它将无法编译。
真正的问题是在将 JAR 放入WEB-INF/lib
与容器/lib
目录之间。一般来说,您应该始终将您的 JAR 放在WEB-INF/lib
. 将它们放在全球范围内会产生几个后果:
如果多个部署,单例现在对所有 Web 应用程序(一个类加载器)都是全局的
如果库包含对您的任何类的引用,则更容易引入内存泄漏(见上文)
您不会复制相同的类(每个 Web 应用程序将重用相同的类,而不是在每个类加载器中都有一个单独的副本