WEB-INF/classes/ vs WEB-INF/lib/*.jar in classpath priority?

时间秒杀一切 提交于 2019-12-18 20:15:29

问题


a war packaged for a tomcat webapp contains WEB-INF/classes and WEB-INF/lib/*.jar

which of them has higher priority in the CLASSPATH?

the reason I'm asking is, that my application uses A.jar, which contains aspects generated from an aspectj project; and B.jar, which are to be woven with the aspects from A.jar. when the project myapp is compiled, it generates many Classes which override those same classes from B.jar, these are packaged into the WEB-INF/classes dir. so if tomcat load WEB-INF/lib/*.jar first, then the woven aspects won't take effect


回答1:


When a request to load a class from the web application's WebappX class loader is processed, this class loader will look in the local repositories first, instead of delegating before looking. There are exceptions. Classes which are part of the JRE base classes cannot be overriden. For some classes (such as the XML parser components in J2SE 1.4+), the J2SE 1.4 endorsed feature can be used (see the common classloader definition above). Last, any JAR containing servlet API classes will be ignored by the classloader. All other class loaders in Tomcat 5 follow the usual delegation pattern.

Therefore, from the perspective of a web application, class or resource loading looks in the following repositories, in this order:

Bootstrap classes of your JVM
System class loader classes (described above)
/WEB-INF/classes of your 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

So WEB-INF/classes is searched first before WEB-INF/lib

Ref: http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html




回答2:


If you put classes into WEB-INF/classes, they have priority before the jars in WEB-INF/lib. I have sometimes used this for debugging purposes. See also here.



来源:https://stackoverflow.com/questions/8364619/web-inf-classes-vs-web-inf-lib-jar-in-classpath-priority

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!