我有3个应用程序部署在Tomcat(版本9.02)
上应用程序使用一个常见的jar,由我添加,位于$CATALINA_BASE / lib
当我调用 WS 时,它有一个lib,它也在公共jar 中,但是有另一个版本,它会抛出异常。如果我在 WS上删除此lib =>有用!这是否意味着普通jar也使用* WS * libs?通常, WS 资源对其他应用程序甚至其他服务器都不可见。
我的问题是:我该怎么办? $ CATALINA_BASE / lib
上的lib不会使用 WS 库我读到了这个: Class Loader HOW-TO但它没有多大帮助
THX
答案 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"/>