当存在2个版本的lib时,在tomcat中按需加载类?

问题描述 投票:1回答:1

我从互联网上搜索了许多来源。但我还是找不到能够准确解决我问题的具体资源。

在tomcat中,是否在启动时加载了类中的任何顺序。想象一下像这样的情况。

我在webapps中有myApp.war文件。在那次战争中,我有一些库(比如说mylib-2.5.jar捆绑在里面)。并且想象一下,我还在/ lib文件夹中放置了不同版本(例如mylib-2.8.jar)中的相同库。

因此,当我启动我的应用程序并调用特定的终点时,哪个lib(版本)将有机会通过类加载器(按需)加载到JVM中?

自由冲突的可能性有多大?那是什么原因?

java tomcat jvm classloader lib
1个回答
3
投票

来自@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冲突

© www.soinside.com 2019 - 2024. All rights reserved.