为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,那么编织的方面将不会生效
发布于 2011-12-04 21:33:31
Tomcat在类加载器上有几个文档:
(https://tomcat.apache.org/tomcat-5.5-doc/config/loader.html)
引用自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-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。
发布于 2011-12-03 09:22:01
如果将类放入WEB-INF/classes中,则它们的优先级高于WEB-INF/lib中的jars。我有时会将其用于调试目的。另请参见here。
https://stackoverflow.com/questions/8364619
复制相似问题