人生ずっと勉強。
ITを軸としたT型人間になりたい人のブログ。
09 | 2017/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」
が出たということだった。


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

スポンサーサイト
Python2.6環境でGAEのdev_appserver.pyが吐く「ImportError: No module named _multiprocessing」の暫定解決法


Issue 1504: No module named _multiprocessingにて、
Python2.6環境でGoogle App Engine 用アプリ開発中に出る
「ImportError: No module named _multiprocessing」
の暫定的な解決法を発見。

アプリケーションのルートディレクトリに
import multiprocessing

と記述したPythonファイルを置くだけ。

うん、簡単。
GAEにアプリをアップロードしようとしたときに「UnicodeDecodeError: 'ascii' codec can't decode byte 0x91」エラーが出る原因はプロキシだった


Windows環境で、GAEにテストアプリケーションをアップロードしようとしたときに
「UnicodeDecodeError: 'ascii' codec can't decode byte 0x91」
というエラーが出た。

しかし、Unicode関連のエラーかと思いきや、プロキシの設定ができていないだけだった。
コマンドプロンプトから以下のように変数を設定して解決。

C:\hoge>set https_proxy=http://proxyサーバ:ポート番号
C:\hoge>set http_proxy=http://proxyサーバ:ポート番号



わたくし

いろいろリンク

カテゴリ

月別アーカイブ

最新記事

最新コメント

最新トラックバック

検索フォーム

RSSリンクの表示

リンク

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

ブロとも申請フォーム

この人とブロともになる

QRコード

QR

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