title: Spring boot - java.lang.ClassNotFoundException: javax.servlet.ServletContext and Unable to start EmbeddedWebApplicationContext
body: <p>I have a spring boot application (grails 3.1.8), but when I run the application in intellij i get the following error:</p>
  
  <pre><code>Caused by: java.lang.IllegalStateException: Failed to introspect annotated methods on class org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport
      at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:163)
      at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:292)
      at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:232)
      at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:510)
      ... 26 common frames omitted
  Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext
      at java.lang.Class.getDeclaredMethods0(Native Method)
      at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
      at java.lang.Class.getDeclaredMethods(Class.java:1975)
      at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:152)
      ... 29 common frames omitted
  Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext
      at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
      ... 33 common frames omitted
  </code></pre>
  
  <p>I tried adding javax-servlet-api dependency as suggested in <a href="https://stackoverflow.com/questions/24393684/constructor-threw-exception-nested-exception-is-java-lang-noclassdeffounderror/24394329#24394329">Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: javax/servlet/ServletContext</a></p>
  
  <p>But then I started getting:</p>
  
  <pre><code>ERROR org.springframework.boot.SpringApplication - Application startup failed
  org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
      at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
      at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532)
      at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
      at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766)
      at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361)
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
      at grails.boot.GrailsApp.run(GrailsApp.groovy:55)
      at grails.boot.GrailsApp.run(GrailsApp.groovy:374)
      at grails.boot.GrailsApp.run(GrailsApp.groovy:363)
      at grails.boot.GrailsApp$run.call(Unknown Source)
      at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
      at closemytab.Application.main(Application.groovy:13)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:497)
      at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
  Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
      at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:185)
      at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:158)
      at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
      ... 18 common frames omitted
  </code></pre>
  
  <p>This post then suggests to remove the javax-servlet-api: <a href="https://stackoverflow.com/questions/35021328/spring-boot-unable-to-start-embeddedwebapplicationcontext-due-to-missing-embe">Spring boot -- Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean</a></p>
  
  <p>But then I face the original issue.</p>
  
  <p>Any thoughts?</p>