导入一个
gradle的Spring Boot项目,在启动的时候先提示找不到HttpServletRequest这个包,错误如下:
1 | Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest |
但是相应的Java代码没有报错,所以单独找了
servlet-api.jar导入,并将其添加到Module中,但是导入后出现另一个错误:
1 | 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. |
找了很久都没有找到解决的方法,但是使用
gradle bootrun是可以正常启动运行的,在另外一台机子上也没有任何问题,所以认为项目本身没有任何问题,是在IDEA启动的过程中出现了问题导致的,
看到有一篇使用
Maven也遇到该问题的帖子,对比了依赖:
1 | dependencies { |
然后将
providedRuntime改成了runtime,重新build启动,没有任何问题
该问题产生的原因很可能是因为IDEA在启动的过程中并没有像Gradle一样做完全的build,只是进行了热更新,没有将需要的Jar包编译到项目里
providedCompile和providedRuntime。虽然它们有各自的compile和runtime配置,但这些配置有相同的作用域,只是它们不会添加到war/jar文件中。