クラスパス

どんだけ詰まらせるねんとツッコミを入れまくりたくなるクラスパス

前提

importで大切なのは、コンパイル(javacコマンド)の時だけ使われる、 ということです。


import文であってクラスパスではないことに注意


参考:
CLASSPATHって?(ytp.ne.jp)
importの機能(ytp.ne.jp)

どこ指定したらええねん!?

jarファイルとそうでない場合で場合わけが必要

jarファイルの場合は、jarファイルそのものを指定すればよい。これは簡単。
問題はjarファイルでないクラスを指定するとき。

指定する場所

/Users/bi_na/workspace/Sample1/jp/co/my_lib
Hoge.java

package jp.co.my_lib

class Hoge  { /* 処理 */ }

とある場合、クラスパスには、
/Users/bi_na/workspace/Sample1を指定する。


参考:
クラスパスの設定・具体例 - Java 入門
ビンゴ中西のほげほげ【結論】package宣言とクラスパスの絡み
ビンゴ中西のほげほげ一体全体どういう仕様だ?

覚え方

javacは、欲しいクラスを見つけるために、配下のファイルを(たぶん)覗き見て
クラスパスで指定されたディレクトリにパッケージ名を補完する。


つまり、

クラスパスの値 + import文

という処理を行なう。


javacクラスパス配下のファイルを(たぶん)覗き見て、そのimport文の部分を補うので、
そのファイルがあるところを設定したい気持ちをグッと押さえて、
結構上の方のディレクトリを指定する。
javacの気持ちを優先させてあげよう。

実行時のクラスパスの使われ方

CLASSPATHの役割(ytp.ne.jp)
クラスパスを探索して先に見つかったファイルが使われる。
もやは悲劇。