Tomcat类加载器:WebappX&共同

时间:2018-02-05 11:50:38

标签: java tomcat tomcat8

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

  • WS
  • 应用
  • 管理员

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

当我调用 WS 时,它有一个lib,它也在公共jar 中,但是有另一个版本,它会抛出异常。如果我在 WS上删除此lib =>有用!这是否意味着普通jar也使用* WS * libs?通常, WS 资源对其他应用程序甚至其他服务器都不可见。

我的问题是:我该怎么办? $ CATALINA_BASE / lib

上的lib不会使用 WS

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

THX

1 个答案:

答案 0 :(得分: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库比普通的lib更优先,你应该怎么做。

至于

  

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

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