代码之家  ›  专栏  ›  技术社区  ›  Supun Wijerathne

当存在两个版本的lib时,是否在Tomcat中按需加载类?

  •  1
  • Supun Wijerathne  · 技术社区  · 6 年前

    我在网上找了很多资料。但我还是找不到一个具体的资源来解决我的问题。

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

    我有 我的应用程序战争 webapps中的文件。在那场战争中,我有一些图书馆 mylib-2.5.jar捆绑在里面 )。想象一下,我也把同一个库放在不同的版本中(比如 mylib-2.8.jar版本 )在 /LIB 文件夹。

    所以,当我启动应用程序并调用一个特定的端点时,哪个lib(版本)将有机会被类加载器(按需)加载到JVM中?

    自由党冲突的可能性有多大?为什么会这样?

    1 回复  |  直到 5 年前
        1
  •  3
  •   Ivan    6 年前

    来自@Gyrogearless发布的链接

    因此,从Web应用程序的角度来看,类或资源加载按以下顺序在以下存储库中查找:

    JVM的引导程序类

    /Web应用程序的WEB-INF/类

    /Web应用程序的WEB-INF/lib/*.jar

    系统类加载器类(如上所述)

    公共类加载器类(如上所述)

    如果Web应用程序类加载器配置了 <Loader delegate="true"/> 然后订单变成:

    JVM的引导程序类

    系统类加载器类(如上所述)

    公共类加载器类(如上所述)

    /Web应用程序的WEB-INF/类

    /Web应用程序的WEB-INF/lib/*.jar

    如果类加载器需要加载类X,那么一旦它在一个地方找到它,它就不会在任何其他地方找到它。 如果您放置一个版本的依赖项(比如 MySQL 驱动器)至 $JAVA_HOME/jre/lib/ext 另一个变成 /WEB-INF/lib