- PR -

CLASSPATHの設定の意味

1
投稿者投稿内容
ピノコ
会議室デビュー日: 2003/09/10
投稿数: 7
投稿日時: 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/10
投稿数: 7
投稿日時: 2003-09-17 18:00
間違えてLinuxのところに質問してしまいました・・
すいません。
これ削除ってできるのかな・・。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-09-17 20:36
classpathは作成しているプログラムが外部ライブラリに依存している場合に、そのライブラリの場所を教えてあげるために使用します(標準ライブラリへのclasspathの指定は基本的に必要なし)。

実行時は、外部ライブラリに加えて、実行するファイルのパスをclasspathとして指定してやります。
# 実行ファイルがカレントディレクトリにあればいらないかも

クラスローダーについては、まだ理解しきれていないので、他の方のフォローに期待します。

[ メッセージ編集済み 編集者: かずくん 編集日時 2003-09-17 20:49 ]
アティ
ベテラン
会議室デビュー日: 2003/08/14
投稿数: 91
お住まい・勤務地: KANAGAWA
投稿日時: 2003-09-18 09:12
環境変数にCLASSPATHが設定されていない場合は、標準ライブラリ+カレントディレクトリを、
設定されている場合には、標準ライブラリ+CLASSPATHに設定されているディレクトリを参照します。
なので、CLASSPATHにC:\javaを設定して、c:\java2の配下にあるプログラムのコンパイルはできないと思います。
ただ、CLASSPATHは極力カレントディレクトリのみにしていたほうが無難です。
なぜかというと環境依存になってしまうためです。
米山@クロノス
大ベテラン
会議室デビュー日: 2003/06/10
投稿数: 103
お住まい・勤務地: 大阪市淀川区西中島4-13-22 新大阪淀川ビル5F
投稿日時: 2003-09-18 10:29
こんにちは。米山@クロノスです。

引用:

C:\java\pack1と言うフォルダーの中にpack.javaがある場合
コンパイルする時は c:\java> javac pack1\pack.java ってコマンド打ちますよね。
この場合、pack1\pack.java → c:\java\pack1\pack.java とはしなくて良いのは
c:\java> カレントディレクトリだからですか??
私はこのとき役立っているのがクラスパスだと思っていました。



javacコマンドの引数に指定するファイル名とクラスパスは関係ありません。
上記の場合だと、あくまでもDOS上のカレント・ディレクトリからの相対パス指定なだけです。
ただし、javaコマンドの引数にはファイル名ではなく、「クラスパスが通っている場所からのクラス名」を指定するので、クラスパスが関係してきます。
アティさんがおっしゃられているように、環境変数CLASSPATHに値を設定しない方がよいでしょう。

ジュニア
会議室デビュー日: 2003/05/01
投稿数: 16
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)