• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クラスパスとMANIFEST.MF)

クラスパスとMANIFEST.MFについての質問

このQ&Aのポイント
  • MANIFEST.MFとは、WEB-INF直下にあるファイルで、パスを通すためのものです。Eclipse上でコンパイルする際のエラーの直し方も含めて、MANIFEST.MFについて教えてください。
  • クラスパスはコンパイル時にコンパイラーに「コンパイルするファイルを探すときはまずはここから探してね」という指示をするものです。しかし、現在の環境ではクラスパスの指定がうまく機能しておらず、コンパイル後の実行時にNoClassDefFoundErrorが表示されてしまいます。なぜクラスパスの指定がうまくいかないのか、教えてください。
  • 環境変数でClasspathを設定する際、カレントディレクトリ(.;のような記述)の記述がなぜ必要なのか、必要な時と必要でないときがあるのかについて教えてください。

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

  • ベストアンサー
  • bnosuke-x
  • ベストアンサー率39% (43/110)
回答No.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もご覧下さい。

参考URL:
http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/windows/classpath.html
pgBeginImo
質問者

お礼

わかりやすい回答ありがとうございました。 これからも宜しくお願いします。 P.S 返事遅れましてまことに申し訳ありません