- ベストアンサー
クラスパスとMANIFEST.MFについての質問
- MANIFEST.MFとは、WEB-INF直下にあるファイルで、パスを通すためのものです。Eclipse上でコンパイルする際のエラーの直し方も含めて、MANIFEST.MFについて教えてください。
- クラスパスはコンパイル時にコンパイラーに「コンパイルするファイルを探すときはまずはここから探してね」という指示をするものです。しかし、現在の環境ではクラスパスの指定がうまく機能しておらず、コンパイル後の実行時にNoClassDefFoundErrorが表示されてしまいます。なぜクラスパスの指定がうまくいかないのか、教えてください。
- 環境変数でClasspathを設定する際、カレントディレクトリ(.;のような記述)の記述がなぜ必要なのか、必要な時と必要でないときがあるのかについて教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
1.はよく解らないのですが、たぶん2.の疑問が解けると解決に近づくと思います。 というわけで2.について。 ポイントは、パッケージ(package)です。 javaでクラスを作るとき、クラスをパッケージに入れることができますよね。 このとき、.class ファイルはパッケージと同じ構成のディレクトリに入れることになっています。 例えば、mylib.util.file.UTF8Read というクラスなら、 UTF8Read.classファイルを mylib/util/file ディレクトリに入れます。 このとき、mylib の入っているディレクトリがパッケージのルートになります。 コンパイルや実行をするとき、このディレクトリ(パッケージのルート)がクラスパスとして指定されていないと、UTF8Readクラスを見つけることができません。 ここで注意したいのが、クラスパスは、.class ファイルのある場所ではなく、パッケージのルートディレクトリまたは、パッケージが入っているjarファイルを指定すると言うことです。 つまり、「ここにある」ではなく「ここから探し始める」という指定です。 上の例では、myllib の上のディレクトリがクラスパスで指定されていないとUTF8Readクラスは見つけられないと言うことです。 mylib/util/file ディレクトリでコンパイルしても見つけることはできません。 クラスパスにカレントを指定するのは、現在開発しているクラス群をクラス検索に含めるためです。 上の例で言えば、カレントディレクトリを myllib の上のディレクトリにしてコンパイルすれば、カレントから探し始めてUTF8Readクラスを見つけることができることになります。 参考URLもご覧下さい。
お礼
わかりやすい回答ありがとうございました。 これからも宜しくお願いします。 P.S 返事遅れましてまことに申し訳ありません