網頁

2020/9/17

IntelliJ Spring Boot java.lang.ClassNotFoundException: javax.servlet.Filter

從SVN checkout下來一個Spring Boot專案在IntelliJ IDEA執行出現java.lang.ClassNotFoundException錯誤。

Checkout下來的專案原本都是在Eclipse開發且執行完全沒有問題,但在IntelliJ就會錯。

Caused by: java.lang.ClassNotFoundException: javax.servlet.Filter
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 97 common frames omitted

經查發現是因為專案Maven的pom.xml中設定spring-boot-starter-tomcat<scope>provided導致。似乎是IntelliJ沒有把provided scope的依賴放入classpath。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

解決方式是把provided改為compile即可,不過在build的時候會連同此依賴一起打包。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>compile</scope>
</dependency>


另一個解決方式為在上方功能選單Run -> Edit Configurations...選擇要執行的應用程式,在[Configuration]標籤下勾選[Include dependencies with "Provided" scope],則IntelliJ就會把provided scope的依賴加到classpath,執行時就會不會出現錯誤了。




沒有留言:

張貼留言