在本地启动一个新项目时, 报错: java.lang.ClassNotFoundException: javax.servlet.Filter 环境intellJ idea,我同事的myeclipse就能够直接启动java
最后搜了下问题 问题缘由是:spring boot项目中引入使用的是scope=provided <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> 而默认状况下,idea是不会提供对应的servlet-api.jar包eclipse会提供spring
网上有人说这是idea的bug,这么说显然是不对的,是彻底没有理解provided和compile的区别 对于scope=compile的状况(默认scope),也就是说这个项目在编译,测试,运行阶段都须要这个artifact对应的jar包在classpath中。而对于scope=provided的状况,则能够认为这个provided是目标容器已经provide这个artifact。apache
这么说可能不是很好理解:换个简单的,就是你在把这个项目打成war包时,scope=provided的jar包,不会出如今WEB-INFO/lib目录下,而scope=compile的jar包,会放到WEB-INFO/lib目录api
这样能够避免想servlet-api.jar这样的jar包冲突,可是若是遇到idea下默认不提供servlet-api.jar时,使用scope=provided就会缺乏对应的jar包,也就是我遇到的问题找不到类tomcat