人生ずっと勉強。
ITを軸としたT型人間になりたい人のブログ。
09 | 2010/10 | 11
S M T W T F S
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 - - - - - -

スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Eclipseプラグインを使ってGAE/Jアプリ開発中にNoClassDefFoundError:war標準でjarをおいてなかったのが原因


【問題】
Eclipseプラグインを使ってGAE/Jアプリ開発中、
ローカル環境でテストしたら、NoClassDefFoundErrorが出る。
エラーが出ているクラスは、外部アーカイブとしてビルドパスに追加していたjarファイル内のもの。

【解決方法】
WARパッケージ標準ディレクトリ構成に沿って、ライブラリを
war/WEB-INF/lib/
に配置する。

【問題の経緯】
GAE/J+Eclipseプラグインでアプリケーション開発中、ローカル環境でのテスト時に、
ライブラリ内(jarファイル)のクラスをnewしたり、変数の型として使用する箇所で
「NoClassDefFoundError」
が出ることに悩まされた。
「ビルドバスにライブラリ通してるからコンパイルエラーも出てない。動くはずなんだけどな」と
考えていたのがそもそもの間違い。

GAE/Jの場合、Webアプリケーションのトップになるディレクトリである「コンテキストルート」はwar標準に従い、
「war/」ディレクトリになる。
なので、jarファイルは war/ 配下の適切な位置に配置しておかないと、実行時に
「そんなクラスねーよ」
といわれる。
war標準に従うと、jarファイル(ライブラリ)は
「war/WEB-INF/lib/」
に配置するようです。

コンパイルが通るのは、eclipse上でビルドバスに外部アーカイブとして必要なjarファイルを指定してしまっていたから。
なので、eclipseがコンパイルするときにはちゃんと目的のクラスが見つかる。
けども、import文はコンパイル時に解決される情報のため、クラスファイルには記述されないので、
GAE/Jアプリケーションとして起動したさいに、
ライブラリ内のクラスをnewしたり、変数の型として使用する箇所ではじめてライブラリを探しにいき、
結果として war/WEB-INF/lib/ 以下に適切にjarファイルが配置されていなかったため、
「NoClassDefFoundError」
が出たということだった。


まったく不勉強すぎてこれだけで何時間もムダにしたけど、一つ賢くなりました。

スポンサーサイト


わたくし

いろいろリンク

カテゴリ

月別アーカイブ

最新記事

最新コメント

最新トラックバック

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。