首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WEB-INF/classes/ vs类路径优先级中的WEB-INF/lib/*.jar?

WEB-INF/classes/ vs类路径优先级中的WEB-INF/lib/*.jar?
EN

Stack Overflow用户
提问于 2011-12-03 09:03:22
回答 2查看 11.9K关注 0票数 15

为tomcat webapp打包的war包含WEB-INF/classes和WEB-INF/lib/*.jar

它们中哪一个在CLASSPATH中具有更高的优先级?

我问这个问题的原因是,我的应用程序使用A.jar和B.jar,前者包含从aspectj项目生成的方面,后者将与A.jar中的方面结合在一起。在编译项目myapp时,它会生成许多类,这些类覆盖B.jar中的那些相同的类,这些类被打包到WEB-INF/classes目录中。因此,如果tomcat首先加载WEB-INF/lib/*.jar,那么编织的方面将不会生效

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-04 21:33:31

Tomcat在类加载器上有几个文档:

(https://tomcat.apache.org/tomcat-5.5-doc/config/loader.html)

  • high-level: Class Loader HOW-TO Loader Component

引用自http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html

(添加换行符以提高可读性)

如上所述,web应用程序类加载器与缺省的Java2委托模型不同(根据Servlet规范,版本2.3,9.7.2Web应用程序类加载器部分中的建议)。

当处理从web应用程序的WebappX类加载器加载类的请求时,此类加载器将在本地存储库中查找first,而不是在查找之前进行委托。

但也有例外。不能重写属于JRE基类的类。对于某些类(比如J2SE 1.4+中的XML解析器组件),可以使用J2SE 1.4认可的特性(请参阅上面的公共类加载器定义)。

最后,类加载器将忽略任何包含servlet API类的JAR。

Tomcat5中的所有其他类加载器都遵循通常的委托模式。

因此,从web应用程序的角度来看,类或资源加载按以下顺序在以下存储库中查找:

JVM的

  • 引导程序类
  • 系统类加载器类(描述web application
  • /WEB-INF/lib/*.jar of your web application
  • $CATALINA_HOME/common/classes
  • $CATALINA_HOME/common/endorsed/*.jar
  • $CATALINA_HOME/common/i18n/*.jar
  • $CATALINA_HOME/common/lib/*.jar
  • $CATALINA_BASE/shared/classes
  • $CATALINA_BASE/shared/lib/*.jar

的above)

  • /WEB-INF/classes

因此,在WEB-INF/lib之前首先搜索WEB-INF/classes

票数 18
EN

Stack Overflow用户

发布于 2011-12-03 09:22:01

如果将类放入WEB-INF/classes中,则它们的优先级高于WEB-INF/lib中的jars。我有时会将其用于调试目的。另请参见here

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8364619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档