4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Servlet/Ajax]NoClassDefFoundErrorの解決方法[Eclipse]

Last updated at Posted at 2019-07-01

どうも新米エンジニアのnoyです。
ServletとAjaxを使って非同期通信できるwebアプリを作っているのですが、
エラー解決に少々時間がかかったので記録を残します。

開発環境
 エディター:Eclipse 2019-03 (4.11.0)
 Webサーバー:Apache Tomcat v9.0
 言語:Java
 ライブラリ:
  ・jquery-3.4.1.min.js
  ・jackson-annotations-2.9.9.jar
  ・jackson-core-2.9.9.jar
  ・jackson-databind-2.9.9.jar

#エラー内容
Servletからajaxにレスポンスを返そうとしたところ、HTTPステータス 500 – Internal Server Errorが発生

スクリーンショット 2019-07-01 20.08.17.png Chromeのディベロッパーツール「console」タブ

「500エラーってなに?!」となり、わんやわんやと少々時間を潰してしまいましたが、

スクリーンショット 2019-07-01 20.09.04.png エラーをクリックしていくと例外報告を発見。 「根本原因 java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper」

あれ?ObjectMapperを定義しているファイルはimportしてるはずなんだけど....
そう思いながらEclipseを色々見直してると「問題」タブで以下の警告を発見。

スクリーンショット_2019-07-01_21_22_33.png

あれ、クラスパスに追加してるはずのjackson-XXXXXX-2.9.9.jarファイルが参照されてないのかも...?

#原因
ObjectMapper(Jacksonのクラス)が定義されているファイル(jackson-XXXXXX-2.9.9.jar)を参照することができず、java.lang.NoClassDefFoundErrorとなっているため。

※ Jacksonとは…Java用のJSONパーサーライブラリの1つ。JavaオブジェクトとJSONの相互変換ができる。

ということで「eclipse クラスパス・エントリー は、エクスポートまたは公開されません。」でググってみたところ、以下のページを見て解決できました。

https://codeday.me/jp/qa/20190201/208565.html
「spring-mvc – Eclipseの警告:XXXXXXXXXXX.jarはエクスポートまたは公開されません。ランタイムClassNotFoundExceptionsが発生する可能性があります」

#解決策
jackson-XXXXXX-2.9.9.jarファイルを参照ライブラリーから削除し、WEB-INF / libフォルダに直接格納する。

スクリーンショット_2019-07-01_21_37_20.png スクリーンショット_2019-07-01_21_43_15.png

参照ライブラリーにある、3つのjackson-XXXXXX-2.9.9.jarファイルを「ビルド・パスから除外」で削除。

スクリーンショット_2019-07-01_21_52_25-2.png

WebContent/WEB-INF/libフォルダに3つのjackson-XXXXXX-2.9.9.jarファイルを直接ドラッグ&ドロップ。

スクリーンショット 2019-07-01 21.50.10.png

「ファイルをコピー」を選択して「OK」

スクリーンショット 2019-07-01 21.55.21.png

ファイルが格納されました。

スクリーンショット_2019-07-01_22_20_36.png

3つのjackson-XXXXXX-2.9.9.jarファイルに関する警告が消えています。(今は残り2項目については無視)

スクリーンショット 2019-07-01 22.24.53.png

500エラーも消えてServletが実行できました。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?