我正在从互联网上搜索许多相关信息。但是我仍然找不到能确切解决我问题的特定资源。
在tomcat中,是否在启动时加载了类中的任何顺序。试想一下这样的情况。
我在webapp中有 myApp.war 文件。在那场战争中,我有一些图书馆(例如 mylib-2.5.jar捆绑在其中)。想象一下,我还在 / lib 文件夹内放置了相同版本的库(例如 mylib-2.8.jar )。
因此,当我启动应用程序并调用特定的端点时,哪个lib(版本)将有机会由类加载器加载(按需)到JVM中?
lib冲突的机会是什么?那是什么原因?
答案 0 :(得分:3)
来自@GyroGearless发布的链接
因此,从Web应用程序的角度来看,类或资源的加载按以下顺序显示在以下存储库中:
•JVM的引导类
•/ WEB-INF /您的网络应用程序类
Web应用程序的•/ WEB-INF / lib / *。jar
•系统类加载器类(如上所述)
•公共类加载器类(如上所述)
如果将Web应用程序类加载器配置为
<Loader delegate="true"/>
,则顺序变为:•JVM的引导类
•系统类加载器类(如上所述)
•公共类加载器类(如上所述)
•/ WEB-INF /您的网络应用程序类
Web应用程序的•/ WEB-INF / lib / *。jar
如果类加载器需要加载类X,则一旦它在一个位置找到它,就不会在其他任何位置查找它。
如果将依赖关系的一个版本(例如MySQL
驱动程序)放置到$JAVA_HOME/jre/lib/ext
并将另一个版本放置到/WEB-INF/lib