從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,執行時就會不會出現錯誤了。
沒有留言:
張貼留言