2015-09-11 5 views
7

Everytime я пытаюсь запустить весной загрузки приложение сконфигурировано с JSP я получаю эту ошибку:Spring загрузки JSP ошибка: NoClassDefFoundError

java.lang.NoClassDefFoundError: javax/servlet/ServletContext 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
    at java.lang.Class.getDeclaredMethods(Class.java:1975) 
............. 
[more errors/exceptions] 
............. 
Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/ServletContext 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
    at java.lang.Class.getDeclaredMethods(Class.java:1975) 

Я попытался запустить образцы: spring-boot-sample-web-jsp и spring-boot-sample-web-jsp

Результат то же самое для этих образцов. Я запускаю приложение с использованием IntelliJ IDEA и не имею IDEA, почему он не работает.

+0

http://stackoverflow.com/questions/19690267/getting-java-lang-classnotfoundexception-javax-servlet-servletcontext-in-junit – Reimeus

+0

Ошибка говорит вам, что определение класса не найдено, а трассировка стека для что. Вы отследили его? –

ответ

15

Существует bug in IntelliJ, что означает, что предоставленные зависимости не добавляются в путь к классам. Предполагая, что вы хотите придерживаться IDEA, у вас есть несколько вариантов:

  • вручную настроить путь к классам в IDEA
  • Run образцы в командной строке с помощью mvn spring-boot:run
  • Удалить все вхождения <scope>provided</scope> из ПОМ. Это означает, что приложение не может быть развернуто как война с Tomcat или аналогично
0

Я нашел лучшее обходное решение для этой ошибки.

Если вы запускаете проект напрямую с помощью командной строки, вы потеряете функцию отладки, предоставляемую IDE. Вы можете щелкнуть вкладку Maven Project, найти spring-boot:run goal, щелкните правой кнопкой мыши и выберите debug XXXX. Используя этот способ, вы можете получить полную функцию отладки, которую дает ваша IDE.

2

В отчете об ошибке было предложено еще workaround.

Вы можете использовать <scope>provided</scope>, как предложено в документации весны, а затем зайдите в свои настройки проекта в IntelliJ. Для рассматриваемого модуля на вкладке «Зависимости» вы увидите, что зависимости, связанные с spring-boot-starter-tomcat, перечислены как «Предоставлено». Изменение их на «Компиляция» должно заставить IntelliJ добавить их в путь к классам.

Имеет то преимущество, что не требует никаких изменений в вашем pom.xml и позволяет использовать интеграцию Spring Boot, предоставляемую IntelliJ.

+1

Вместо публикации ссылки, которая может быть устаревшей, попробуйте включить некоторые подробности об этом решении и используйте ссылку в качестве ссылки! –

+1

Хорошая точка. Благодарю. Я обновил свой ответ. –

+0

tomcat-embed-websocket также пришлось изменить для компиляции в моем случае. большое спасибо – vigamage

Смежные вопросы