- - PR -
CLASSPATHの設定の意味
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-09-17 17:57
基本中の基本だとは思いますが。
パッケージのあたりの勉強をいていまして、 C:\java\pack1と言うフォルダーの中にpack.javaがある場合 コンパイルする時は c:\java> javac pack1\pack.java ってコマンド打ちますよね。 この場合、pack1\pack.java → c:\java\pack1\pack.java とはしなくて良いのは c:\java> カレントディレクトリだからですか?? 私はこのとき役立っているのがクラスパスだと思っていました。 でも、同じことをjava2ってフォルダでやっても同じように c:\java2> なったところで c:\java2\pack1\pack.javaのc:\java2を省略しても できました。 クラスパスはSDKをインストールする時に説明があったので意味もわからず C:\java;. としていました。 これがなかったらどうなるのかなと思い、消して再起動をかけて いくつか作ったjavaのプログラム(「こんにちは」と画面に表示する程度のプログラム) をコンパイル、実行したら動きました。 クラスパスがないと動かないと思ったのに・・・あれ?? ますます分からなくなりました。 参考記事のページを検索で見つけて読みました。 クラスローダと言う単語が出てきますが、 これは何を基準にどこからどこまでをCLASSファイルを探してくるのでしょうか。 このあたりの仕組みが分かる人がいましたら教えてください。 | ||||
|
投稿日時: 2003-09-17 18:00
間違えてLinuxのところに質問してしまいました・・
すいません。 これ削除ってできるのかな・・。 | ||||
|
投稿日時: 2003-09-17 20:36
classpathは作成しているプログラムが外部ライブラリに依存している場合に、そのライブラリの場所を教えてあげるために使用します(標準ライブラリへのclasspathの指定は基本的に必要なし)。
実行時は、外部ライブラリに加えて、実行するファイルのパスをclasspathとして指定してやります。 # 実行ファイルがカレントディレクトリにあればいらないかも クラスローダーについては、まだ理解しきれていないので、他の方のフォローに期待します。 [ メッセージ編集済み 編集者: かずくん 編集日時 2003-09-17 20:49 ] | ||||
|
投稿日時: 2003-09-18 09:12
環境変数にCLASSPATHが設定されていない場合は、標準ライブラリ+カレントディレクトリを、
設定されている場合には、標準ライブラリ+CLASSPATHに設定されているディレクトリを参照します。 なので、CLASSPATHにC:\javaを設定して、c:\java2の配下にあるプログラムのコンパイルはできないと思います。 ただ、CLASSPATHは極力カレントディレクトリのみにしていたほうが無難です。 なぜかというと環境依存になってしまうためです。 | ||||
|
投稿日時: 2003-09-18 10:29
こんにちは。米山@クロノスです。
javacコマンドの引数に指定するファイル名とクラスパスは関係ありません。 上記の場合だと、あくまでもDOS上のカレント・ディレクトリからの相対パス指定なだけです。 ただし、javaコマンドの引数にはファイル名ではなく、「クラスパスが通っている場所からのクラス名」を指定するので、クラスパスが関係してきます。 アティさんがおっしゃられているように、環境変数CLASSPATHに値を設定しない方がよいでしょう。 | ||||
|
投稿日時: 2003-09-18 11:25
C:\java;.
「;.」部分が大切ですよね。 設定したCLASSPATHにカレントが含まれているのでc:\java2に移ったとしても 実行できるというわけです。 #クラスパスにカレントが含まれているためc:\java2に移動しても #c:\java2以下のパッケージにクラスパスが通ることになる ためしにCLASSPATHを「C:\java」としてc:\java と c:\java2で実行したらどうなるでしょう? ちなみにコンパイルするときのクラスパスはかずくんさんの通りです。 [ メッセージ編集済み 編集者: ジュニア 編集日時 2003-09-18 11:30 ] |
1