Everytime I try to run spring boot app configured with JSP I get this error:
java.lang.NoClassDefFoundError: javax/servlet/ServletContext
at java.lang.Class.
There's a bug in IntelliJ that means that provided dependencies aren't added to the classpath. Assuming you want to stick with IDEA, you have a few options:
mvn spring-boot:run
<scope>provided</scope>
from the pom. This will mean that app can't be deployed as a war to Tomcat or similarEDIT: The bug is fixed and the server will start normally, as long as you tick the Include dependencies with "Provided" scope checkbox in the run configuration, below classpath.
I found a better workaround for this bug.
If you run your project using command line directly, you will lose the debug function provided by IDE. You can click the Maven Project
tab, find the spring-boot:run goal
, right click then select debug XXXX
. By using this way you can get full debug feature that your IDE gives.
Another workaround was suggested on the bug report.
You can use the <scope>provided</scope>
as suggested in the Spring documentation, and then go into your Project Settings in IntelliJ. For the module in question, in the Dependencies tab, you should see that the dependencies related to spring-boot-starter-tomcat
are all listed as "Provided". Changing them to "Compile" should force IntelliJ to add them to the classpath.
It has the advantage of both not requiring any modifications to your pom.xml
and allowing you to use the Spring Boot integration provided by IntelliJ.