我从互联网上搜索了许多来源。但我还是找不到能够准确解决我问题的具体资源。
在tomcat中,是否在启动时加载了类中的任何顺序。想象一下像这样的情况。
我在webapps中有myApp.war文件。在那次战争中,我有一些库(比如说mylib-2.5.jar捆绑在里面)。并且想象一下,我还在/ lib文件夹中放置了不同版本(例如mylib-2.8.jar)中的相同库。
因此,当我启动我的应用程序并调用特定的终点时,哪个lib(版本)将有机会通过类加载器(按需)加载到JVM中?
自由冲突的可能性有多大?那是什么原因?
来自@GyroGearless发布的链接
因此,从Web应用程序的角度来看,类或资源加载按以下顺序查找以下存储库:
•JVM的Bootstrap类
•/ WEB-INF /您的Web应用程序的类
•Web应用程序的/ WEB-INF / lib / * .jar
•系统类加载器类(如上所述)
•公共类加载器类(如上所述)
如果Web应用程序类加载器配置了
<Loader delegate="true"/>
,则订单变为:•JVM的Bootstrap类
•系统类加载器类(如上所述)
•公共类加载器类(如上所述)
•/ WEB-INF /您的Web应用程序的类
•Web应用程序的/ WEB-INF / lib / * .jar
如果classloader需要加载类X,那么一旦它在一个地方找到它,它就不会在任何其他地方查找它。如果您将一个版本的依赖项(比如MySQL
驱动程序)放到$JAVA_HOME/jre/lib/ext
而另一个版本放入/WEB-INF/lib
,则可能存在Lib冲突