idea編譯打包項目遇到的坑

在本地啓動一個新項目時, 報錯: 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

相關文章
相關標籤/搜索