2015-09-11 21 views
7

Jedesmal, wenn ich Feder Boot-App mit JSP konfiguriert laufen bekomme ich diesen Fehler:Frühling Boot JSP Fehler: 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) 

Ich habe versucht, Proben laufen: spring-boot-sample-web-jsp und spring-boot-sample-web-jsp

Das Ergebnis ist das gleiche für diese Proben. Ich laufe Anwendung mit IntelliJ IDEA und habe keine Idee, warum es nicht funktioniert.

+0

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

+0

Der Fehler sagt Ihnen, dass keine Klassendefinition gefunden wurde, und die Stack-Trace für Das. Hast du es verfolgt? –

Antwort

15

Es gibt eine bug in IntelliJ, die bedeutet, dass die bereitgestellten Abhängigkeiten nicht zum Klassenpfad hinzugefügt werden. Angenommen, Sie sind mit IDEA bleiben möchten, haben Sie ein paar Optionen:

  • manuell konfigurieren Sie den Classpath in IDEA
  • Führen Sie die Proben auf der Kommandozeile mit mvn spring-boot:run
  • alle Vorkommen von <scope>provided</scope> aus der pom entfernen. Das bedeutet, dass die App nicht als Krieg gegen Tomcat o.ä. eingesetzt werden kann.
0

Ich habe eine bessere Lösung für diesen Fehler gefunden.

Wenn Sie Ihr Projekt direkt über die Befehlszeile ausführen, verlieren Sie die von IDE bereitgestellte Debugfunktion. Sie können auf die Registerkarte Maven Project klicken, die spring-boot:run goal finden, mit der rechten Maustaste klicken und dann debug XXXX auswählen. Auf diese Weise erhalten Sie die volle Debug-Funktion, die Ihre IDE bietet.

2

Ein anderer workaround wurde auf dem Fehlerbericht vorgeschlagen.

Sie können die <scope>provided</scope> wie in der Spring-Dokumentation vorgeschlagen verwenden und dann in IntelliJ in Ihre Projekteinstellungen gehen. Für das betreffende Modul sollten Sie auf der Registerkarte Abhängigkeiten sehen, dass die Abhängigkeiten, die sich auf spring-boot-starter-tomcat beziehen, alle als "Bereitgestellt" aufgeführt sind. Wenn Sie sie in "Kompilieren" ändern, sollte IntelliJ gezwungen sein, sie zum Klassenpfad hinzuzufügen.

Es hat den Vorteil, dass keine Änderungen an pom.xml erforderlich sind und Sie die Spring-Boot-Integration von IntelliJ verwenden können.

+1

Anstatt einen Link zu posten, der veraltet sein kann, versuchen Sie, hier einige Details zur Problemumgehung anzugeben, und verwenden Sie den Link als Referenz! –

+1

Guter Punkt. Vielen Dank. Ich habe meine Antwort aktualisiert. –

+0

tomcat-embed-websocket musste auch geändert werden, um in meinem Fall zu kompilieren. Danke vielmals – vigamage

Verwandte Themen