こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

クラス名正しいのにNoClassDefFound:

TomcatとEclipseでwebアプリ開発を勉強している者です。

jspに持っていく前に、主要なメソッドがちゃんと動作するかどうかをテストしていましたら、
以下のように、コンパイルは出来ても実行時のコマンド結果が上手くいかず、さらに(2)のコマンド結果にも腑に落ちず、とても困ってます。。

以下が問題のコードの構成です。
・FavoriteSearch.java
package mangasearch;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
class FavoriteSearch{
public static void main(String[] args) throws IOException{

//メインメソッド

}


《コンパイル時》
C:\tomcat7\webapps\mangasearch\WEB-INF\src\mangasearch>javac -classpath C:\tomca
t7\webapps\mangasearch\WEB-INF\src FavoriteSearch.java
→成功

実行時
(1)C:\tomcat7\webapps\mangasearch\WEB-INF\src>java -classpath C:\tomcat7\webapps\ma
ngasearch\WEB-INF\src mangasearch\FavoriteSearch

Exception in thread "main" java.lang.NoClassDefFoundError: mangasearch\FavoriteS
earch (wrong name: mangasearch/FavoriteSearch)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

【コマンドの動機】
・パッケージを宣言しているので、カレントディレクトリをFavoriteSearch.classがあるディレクトリより階層をひとつ上にする。
・mangasearchパッケージをsrcフォルダから探させる。
・パッケージ名をクラス名の前に\をつけ、添える。

参考サイト
http://javafaq.jp/S003.html

でjava.lang.NoClassDefFoundError:については調べたのですが、クラス名もあっていますし、どうしてこのようなエラーが出るのかが分かりません。。

(2)C:\tomcat7\webapps\mangasearch\WEB-INF\src\mangasearch>java -classpath C:\tomcat
7\webapps\mangasearch\WEB-INF\src FavoriteSearch

エラー: メイン・クラスFavoriteSearchが見つからなかったかロードできませんでした

【コマンドの動機】
・カレントディレクトリにコンパイルしたFavoriteSearch.classがある。
・mangasearchパッケージをsrcフォルダから探させる。

(2)は恐らく結果的に(1)以前の問題だと思われるのですが、どこが問題なのかイマイチ分かりません。。

稚拙な質問かとは思いますが、ご教授のほど、よろしくお願いいたします。


-参考-
階層図(概略)は以下のようになります。
■tomcat7
|-■mangasearch(プロジェクトフォルダ)
|-■bin
|-■src
|-■work
|-■engine
|-■WEB-INF
    |-■classes
    | |-■mangasearch(パッケージフォルダ)
| → Manga.class / MangaMgr.class
    |-■lib
    |-■src
       |-■mangasearch(パッケージフォルダ)
         → FavoriteSearch.java / FavoriteSearch.class /Manga.java / TagSearch.java /
 *今はテストとしてコマンドプロンプト上でコンパイル・実行をしていますのでsrcフォルダに便宜上FavoriteSearch.classがあります。

投稿日時 - 2012-02-17 06:24:54

QNo.7310057

すぐに回答ほしいです

質問者が選んだベストアンサー

C:\tomcat7\webapps\mangasearch\WEB-INF\src\mangasearch>java -classpath C:\tomcat
7\webapps\mangasearch\WEB-INF\src mangasearch.FavoriteSearch

java 実行時は、クラスのパッケージは「\」 ではなく、「.」 です。

投稿日時 - 2012-02-17 11:01:35

お礼

仰っていただいたとおり、実行時(1)のコマンドクラスのパッケージは「\」 ではなく、「.」 で上手くいきました!ありがどうございます!

投稿日時 - 2012-02-17 18:27:53

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

public にしなくていいんだっけ?

投稿日時 - 2012-02-17 09:08:42

あなたにオススメの質問