きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

後輩に呼び出しを食らった

ももいろスウィーティーの加藤先生似の人の電話経由で、
隣のビルに来いやー、と呼び出し。
えっ?ClassNotFoundException?
そんなのそろそろ解決出来るようになってよ。
NullPointerExceptionと同レベルの稚拙な例外クラスだ。
なんて思いながら隣のビルに行った。


あれ?NoClassDefFound?
えーと、なんだっけかな。
確か、コンパイルの時にはあったのに系の
問題でJava仮想マシンが投げるErrorじゃなかったかな?
まあ、だいたいはそんな程度の話で、コンパイルやデプロイに問題があるってことだ。


こういう時にやることは決まってる。
ちゃんとクラスファイルの存在確認しよう。
リソース検索、クラス検索。
本気の時は、Jarまでかっさばくが、とりあえずbinフォルダの中を見る。あるある。
ビルドパスの通し方、JavaEEモジュール依存関係を見る。
なんか、EJBのプロジェクトが、db2JDBCドライバとかしかないLibプロジェクトをJarにして、JavaEEモジュール依存関係のとこでチェックいれてクラスパスを通してるのを見て、空いた口ポカーーん。。。
とりあえずそんな設定は消した。EARプロジェクトからもな。


.settingsフォルダの、org.eclipse.wst.common.componentってファイルは見ておかないといけない。頼むから、パッケージエクスプローラの隣には、ナビゲータを配置してください。
どうも、testcase/srcもデプロイされてますね。
クラスパスのルートに設定ファイルがあって、テストケースの設定ファイルが有効になってしまった模様。



今、家のガリレオで、確認したことがある。
EARプロジェクトを新規作成し、既存の
EJBプロジェクトとJavaプロジェクトをJavaEEモジュール依存関係に含めてみたところ、
Javaプロジェクトの.settingsフォルダにはこれまでコンパイラーの設定が書かれてるorg.eclipse.jdt.core.prefしか無かったのに、org.eclipse.wst.common.componentと、org.eclipse.wst.common.project.facet.core.xmlの2ファイルが増えた。
これにより、Javaプロジェクトのプロパティから見れる設定画面が増えます。
後者のファイルは間違いなく「プロジェクトファセット」と関係してます。
前者のファイルは、どうやらEARのエクスポートの時なんかに効くみたいだぞ。
(別に何かネットを調べたわけではない。)
こんな実験をした。
僕はJavaプロジェクトに、ただのフォルダを追加して、テキストファイルを置いた。次にorg.eclipse.wst.common.componentに、そのフォルダのエントリーを手動で追加した。
よく見るビルドパスの画面では何も変化はないよ。
そしてEARをエクスポートしたら、Jarにはテキストファイルがあった。
次に、Javaプロジェクトのソースフォルダとして、testcase/srcを追加した。すると、
org.eclipse.wst.common.componentにも追加された。どうなるか考えたら分かるだろ?
不要なは消さないといけないんだぞ。それを消しても、Javaのビルドパスとしてtestcase/srcは残ってる。testcase/src/A.javaを作った。もう一回EARのエクスポート。
あらら、A.classがいるぞ?
僕の仮説は否定された。
んー、でもの、wstなんだから、サーバーツールキットとして機能には関係するはずだぞ。
だから、ホットデプロイな事をやると関係するのかもなー。サーバービューとか。
wstとか、wtp関連で色々調べたことあるけど、いくら調べてもwb-resourceとかの謎が拭えない。



まあ、いいや。
みんなこのデプロイの問題にぶち当たって、何度も何度も同じ間違いの是正を手伝ってたのが馬鹿らしくなったから、テストケースは全部テスト対象のクラスとは違うJavaプロジェクトにするように変えてある。