【问题标题】:Tomcat Class Loader : priority between WebappX & CommonTomcat Classloader:WebappS 和 Common 之间的优先级
【发布时间】:2018-02-05 11:50:37
【问题描述】:

我有 3 个应用程序部署在 Tomcat(9.02 版)上

  • WS
  • 应用程序
  • 管理员

应用程序使用了一个普通的 jar,由我添加,位于 $CATALINA_BASE / lib

当我调用 WS 时,它有一个库,它也在 common jar 中,但有另一个版本,这会引发异常。如果我在 WS => 上删除这个库,它会起作用!这是否意味着普通的jar也使用了* WS * libs?通常 WS 资源对其他应用程序不可见,甚至对其他服务器也不可见。

我的问题是:我该怎么做才能使 $CATALINA_BASE/lib

上的 lib 不会使用 WS

我读到这个: Class Loader HOW-TO 但没有多大帮助

谢谢

【问题讨论】:

    标签: java tomcat tomcat8


    【解决方案1】:

    来自Class Loader HOW-TO的文档:

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

    Bootstrap classes of your JVM
    /WEB-INF/classes of your web application
    /WEB-INF/lib/*.jar of your web application
    System class loader classes (described above)
    Common class loader classes (described above)
    

    如果 Web 应用程序类加载器配置为 <Loader delegate="true"/>,则顺序变为:

    Bootstrap classes of your JVM
    System class loader classes (described above)
    Common class loader classes (described above)
    /WEB-INF/classes of your web application
    /WEB-INF/lib/*.jar of your web application
    

    我认为如果你希望你的 webapp 库比普通库具有更高的优先级,你应该怎么做。

    至于

    我的问题是:我该怎么做才能使 $CATALINA_BASE/lib 上的 lib 不使用 WS 库

    在您的 Web 应用程序 (WS) 中加载 $CATALINA_BASE/lib 或 WS 中的库的代码。如果您有一个存在于 $CATALINA_BASE/lib 而不是 WS/lib 中的类,则将使用 $CATALINA_BASE/lib 中的类,并且如果该类引用 WS 中的其他类,则将加载来自 WS 的类(假设你没有<Loader delegate="true"/>

    【讨论】:

    • 感谢您的反馈,当我在conf / context.xml 上添加'' 以反转时,同样的错误(冲突)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2013-09-30
    • 2017-07-01
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多