No Spring WebApplicationInitializer types detected on classpath

前端 未结 13 1868
野的像风
野的像风 2020-11-29 08:03

My Eclipse project is suddenly no longer deploying properly. I can\'t trace it to any particular change I\'ve made to the environment.

I have tested with multiple s

13条回答
  •  夕颜
    夕颜 (楼主)
    2020-11-29 08:55

    I spent my whole day today investigating this problem and none of the answers helped. Here is my scenario. The WebApplicationInitializer types in my case are inside jar files. we have a multi-module gradle web project where each module is packaged as a jar and included in the web artifact. The problem is that Apache tomcat's classloader is not looking for the implementations of WebApplicationIntializer in WEB-INF/lib instead its looking for those types directly under WEB-INF/classes folder.

    Here is what I ended up doing for anyone who faces this problem in future.

    I implemented a ServletContainerInitializer myself and added that class name to META-INF/services/javax.servlet.ServletContainerInitializer

    In the implementation, I copied the code from SpringServletContainerIntializer and used reflections to find the classes implementing a CustomWebApplicationInitializer interface, I did not make use of spring's WebApplicationInitializer interface to avoid any conflicts. Basically I have the same contract as WebApplicationInitializer with a different name. Now on startup, my container initializer is called and I delegated the call to all my CustomWebApplicationInitializers.

    Based on my search I also found that the loader used for tomcat can be updated to have it search in WEB-INF/lib but I have little control over the tomcat I deploy my app to so went with the above solution. Hope this helps someone.

提交回复
热议问题