Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么WEB应用程序更喜欢/WEB-INF/lib而不是/META-INF/MANIFEST.MF?_Java_Web Applications_Tomcat_Dependencies_Manifest - Fatal编程技术网

Java 为什么WEB应用程序更喜欢/WEB-INF/lib而不是/META-INF/MANIFEST.MF?

Java 为什么WEB应用程序更喜欢/WEB-INF/lib而不是/META-INF/MANIFEST.MF?,java,web-applications,tomcat,dependencies,manifest,Java,Web Applications,Tomcat,Dependencies,Manifest,我想知道为什么Java webapps规范为依赖项规定了一个特定的目录:/WEB-INF/lib 实际上,为什么不使用classic/META-INF/MANIFEST.MF文件呢 有人会说webapps更安全,因为libs在WAR文件中进行了物理集成 但是,如果我们这样认为,我们可能会想: 为什么对于一个简单的Java应用程序(简单JAR),没有用于依赖项的特殊目录?它还可以更安全,因为在清单文件中没有错误的类路径(例如修改不当)的风险 其他人会告诉我们webapp是设计成可移植的,所以/WE

我想知道为什么Java webapps规范为依赖项规定了一个特定的目录:
/WEB-INF/lib

实际上,为什么不使用classic
/META-INF/MANIFEST.MF
文件呢

有人会说webapps更安全,因为libs在WAR文件中进行了物理集成

但是,如果我们这样认为,我们可能会想:

为什么对于一个简单的Java应用程序(简单JAR),没有用于依赖项的特殊目录?它还可以更安全,因为在清单文件中没有错误的类路径(例如修改不当)的风险

其他人会告诉我们webapp是设计成可移植的,所以
/WEB-INF/lib
的好处是不用担心链接依赖性


我很想知道你对这个问题的看法

因为WEB-INF/lib提供了一个非常简单、自包含的库包,并简化了最常见用例的整个部署

/WEB-INF/web.xml
/WEB-INF/lib/utils.jar
/WEB-INF/classes/com/example/Servlet.class
/page.jsp

这是一场全面的船战,使用Servlet3.0,web.xml基本上是空的。布局简单,创建起来很简单,最后还要处理一个独立的工件。

jar是一个标准库。对于普通的公用事业罐,最好将它们分开。如果一个库依赖于另一个库,并且您需要该依赖库,那么您将浪费空间、内存,并且可能由于库版本不同而导致问题合并


然而,web应用程序是一个应用程序包。您必须确保一切正常,以便添加所需的库。

首先,您是否知道您也可以在WAR中使用
/META-INF/MANIFEST/MF
文件来指定依赖项,而不是将它们放入
/WEB-INF/lib
?当然可以。这就是为什么我怀疑lib目录的必要性——你已经回答了:可移植性。考虑将WAR部署到一个第三方主机,在该主机上,除了WAR部署文件夹本身,您完全没有访问其他文件夹的权限,或者您所拥有的可能只是一个带有单个WAR文件上载字段的基于Web的表单。您会把依赖项放在哪里?是的,但是对于独立的Java应用程序,我们可以说同样的话,不是吗?例如,一个Jar放在不同的机器上,并且具有完全不同的依赖项的根目录。一个独立的应用程序不应该被设计成可移植的webapps吗?这是一个不同的问题。因此,存在许多工具,甚至大多数IDE都内置了这些工具。当您想将项目导出为“可运行JAR”时,请选中这些选项。