虚拟 WebAppLoader 工作正常。但是当包含在 tomcat/lib/ 中时,同一组罐子不起作用

VirtualWebAppLoader works fine. But same set of jars doesnt work when included in tomcat/lib/

我是 Tomcat 的新手,在 Tomcat7 中一直在使用 virtualWebAppLoader。它工作正常。但是,当我在 tomcat/lib 中包含同一组第三方 jar 文件并使用通用加载器或将它们放入 shared/lib 并使用共享加载器时,服务不会 return 任何数据。一组 jar 文件在每个加载器中保持不变,但它们仅适用于 virtualWebAppLoader 。 catalina.out 中所有部署的部署日志都是相同的。但是当我使用 XHR 访问服务时,我得到以下与部署日志相同的日志:

Sep 11, 2017 10:41:57 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.16 11/28/2012 02:09 PM'
Sep 11, 2017 10:42:07 AM com.sun.jersey.api.core.servlet.WebAppResourceConfig init
INFO: Scanning for root resource and provider classes in the Web app resource paths:
  /WEB-INF/lib
  /WEB-INF/classes
Sep 11, 2017 10:42:07 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
  class com.abc.Class1
  class com.abc.Class2
Sep 11, 2017 10:42:07 AM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
Sep 11, 2017 10:42:07 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.16 11/28/2012 02:09 PM

每次通过 XHR 访问时,我都会得到上述日志。我不知道这是由于罐子丢失还是罐子碰撞造成的。但是这组 jar 在所有加载器中都是相同的,并且它在 VirtualWebAppLoader 中运行良好。

我找到了根本原因。我在多个项目中有一个项目 jar 的共同依赖性,看起来它被不同的 class 加载器加载了两次。但是我仍然无法弄清楚为什么 VirtualWebAppLoader 不会发生这种情况。