/WEB-INF/classes 与 /WEB-INF/lib

Posted

技术标签:

【中文标题】/WEB-INF/classes 与 /WEB-INF/lib【英文标题】:/WEB-INF/classes vs /WEB-INF/lib 【发布时间】:2011-06-11 23:27:28 【问题描述】:

我想将我的 Java EE6 web 类(bean、过滤器、servlet)打包到 jar 中,并将其与其他实用程序 jar 一起放入 /WEB-INF/lib/ 目录,并完全放弃 /WEB-INF/classes/ 目录。

两者在类加载、访问应用程序上下文等方面是否存在实质性差异?

谢谢。

PS:每当谷歌搜索任何 java 规范时,我总是被重定向到距原始 url 十几次点击的 Oracle 文档索引。有谁知道那里发生了什么?

【问题讨论】:

相关:***.com/questions/8364619/…WEB-INF/classes/ vs WEB-INF/lib/*.jar in classpath priority? 【参考方案1】:

在 Tomcat Servlet 容器的定义中:WEB-INF\classesWEB-INF\lib 之前搜索。您可以选择将您的类加载委托给您的自定义类加载器——即使如此,上述顺序仍然保持不变。

如果您选择与其他提供商合作,例如JBOss、Glassfish、Jetty 可能有不同的顺序,但我不确定。

【讨论】:

【参考方案2】:

好吧,很快:假设你有一个类 org.example.Test.class,如果你把它放到 jar 和 WEB-INF/lib/ 目录中,然后将同一个类复制到 WEB-INF/classes/ 中,那么该应用程序的类加载器将使用最后一个(来自 @987654324 @)。

有时您可以将其用作优势-我有一个库,但它有一个错误...我寻找该类的来源(错误在哪里;我错过了我如何知道该错误在该类中的部分,那是另一个故事),我将该类添加到具有固定代码的项目中,并且它被编译为WEB-INF/classes/,而库仍然存在于WEB-INF/lib/中。固定类将一直使用,直到库被修复。

【讨论】:

谢谢,这个功能可能会有所帮助。【参考方案3】:

我会选择/WEB-INF/classes。它允许您在调试模式下运行应用程序并在更改时热交换类。如果将所有内容打包为 jar,则每次更改类时都必须重新打包和重新部署应用程序。

【讨论】:

谢谢。但是,除了调试之外,它在功能上会是相同的应用程序吗?

以上是关于/WEB-INF/classes 与 /WEB-INF/lib的主要内容,如果未能解决你的问题,请参考以下文章

src/main/resources 下的文件位于 target/WEB-INF/classes 下

如果 WEB-INF/classes 目录存在,Tomcat 服务器将不会启动

Eclipse下无法自动编译,或者WEB-INF/classes目录下没文件,编译失败的解决办法(转载)

web-inf与meta-inf

WEB-INF目录与META-INF目录的作用

解决:Could not resolve bean definition resource pattern [/WEB-INF/classes/spring/applicationContext-*.