2015-09-11 18 views
7

毎回私はこのエラーを取得する:春ブーツJSPエラー:NoClassDefFoundErrorが、私はJSPで構成された春のブートアプリケーションを実行しよう

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-jspspring-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は、提供された依存関係がクラスパスに追加されないことを意味します。 POMから<scope>provided</scope>の出現をすべて削除mvn spring-boot:run

  • を使用して、コマンドラインでサンプルを実行IDEA
  • にクラスパスを設定する手動

    • :あなたはIDEAに固執したいと仮定すると、あなたはいくつかのオプションがあります。これは、アプリケーションがTomcatなどとの戦争として展開できないことを意味します。
  • 0

    私はこのバグに対してより良い回避策を見つけました。

    コマンドラインを使用してプロジェクトを直接実行すると、IDEが提供するデバッグ機能が失われます。 Maven Projectタブをクリックし、spring-boot:run goalを見つけて右クリックし、debug XXXXを選択します。このようにすれば、IDEが提供する完全なデバッグ機能を利用できます。

    2

    さらに、workaroundがバグレポートで提案されました。

    Springのドキュメントにあるように<scope>provided</scope>を使用して、IntelliJのプロジェクト設定に入ります。問題のモジュールでは、[依存関係]タブで、spring-boot-starter-tomcatに関連する依存関係がすべて「提供済み」としてリストされていることがわかります。それらを「コンパイル」に変更するとIntelliJはそれらをクラスパスに追加しなければなりません。

    pom.xmlに何も修正する必要がなく、IntelliJが提供するSpring Bootインテグレーションを使用できるという利点があります。

    +1

    リンクをポストするのではなく、古くなってしまう可能性があります。この回避策の詳細をここに含めて、リンクを参考にしてみてください! –

    +1

    良い点。ありがとう。私は自分の答えを更新しました。 –

    +0

    私の場合は、tomcat-embed-websocketもコンパイルするように変更する必要がありました。どうもありがとう – vigamage

    関連する問題