/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\classes
在 WEB-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目录下没文件,编译失败的解决办法(转载)
解决:Could not resolve bean definition resource pattern [/WEB-INF/classes/spring/applicationContext-*.