Websphere 8.5.5 - spring boot error: SpringServletContainerInitializer not a subtype

Websphere 8.5.5 - spring boot error: SpringServletContainerInitializer not a subtype

我有一个 spring 启动应用程序,它在 Tomcat 8 上运行良好。当我尝试将它部署到 "Class loader order" 设置为 "Classes loaded with local class loader first (parent last)" 的 Websphere 8.5.5 时应用程序无法启动,出现以下异常:

... 73 more
Caused by: java.util.ServiceConfigurationError: javax.servlet.ServletContainerInitializer: Provider org.springframework.web.SpringServletContainerInitializer not a subtype
    at java.util.ServiceLoader.fail(ServiceLoader.java:242)
    at java.util.ServiceLoader.access0(ServiceLoader.java:192)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:380)
    at java.util.ServiceLoader.next(ServiceLoader.java:456)
    at com.ibm.ws.webcontainer.webapp.WebAppImpl.initializeServletContainerInitializers(WebAppImpl.java:537)
    at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:410)
    at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:88)
    at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:171)
    ... 74 more

只是添加了我对这个问题的经验,环顾了类似问题的各种答案,我发现问题可能是由一些 javax-servlet 相关的 jar 引起的类路径。经过反复试验,我注意到 spring-boot-starter-web 依赖项继承了 spring-boot-starter-tomcat依赖。在 Websphere 8.5.5 上部署时从应用程序类路径中排除这个 jar 解决了这个问题。