①前提
構成ディレクトリ
- stage11
- test10
- BondTest.java
- issues
- Position.java
- Bond.java
現在地
カレントディレクトリはtest10となっている.
- test10
実行ファイルと呼び出すファイル
実行ファイルはBondTest.java
実行ファイルから呼び出すファイルはPosition.javaとBond.java
②package名に関して
package名はソースファイルが入っているフォルダ名1つをつけてあげる
BondTest.java
package test10;
Position.java
package issues;
Bond.java
package issues;
③クラスパス
packageのルートディレクトリをつけることが肝であった.
今回はBondTest.javaはpackage test10であるからstage11を指定する必要がある.
また呼びだすファイルはpackage issuesであるから一つ上のtest10を指定する必要がある.
クラスパスは以上の2つある.
④import
import文はBondTest.javaからPosition.javaとBond.javaを呼びだす際に必要になる.BondTest.javaのpackageがtest10であるから相対パスは,issues.~となる.よって
BondTest.java
import issues.Position;
import issues.Bond;
⑤javacとjava
いよいよjavacでコンパイルしてjavaで実行するわけである.
javac -cp ..:. BondTest.java
が正解である.
.. は実行ファイルのpackageのルートディレクトリである.
. はPosition.javaとBond.javaのpackage issuesのルートディレクトリ.
ファイル名はBondTest.javaであるのも意外と間違えてtest10.BondTest.javaとかやりたくなるが書かない.
次にjavaコマンドで実行する.-cpはそのままであるからほぼ変わらないが,重要な点が一点あった.
javac -cp ..:. test10.BondTest.java
が正解なのである.javaコマンドでは,package名から書くことを忘れがちになるので注意が必要である.
最後にまとめると,
ディレクトリが揃っていること
実行ファイルのディレクトリにいること
この前提のもとで,
package名のルートディレクトリをクラスパスに指定すること
package名をjavacではつけずjavaではつけることになること
このあたりが要点になる.ディレクトリ構成が異なる人はうまくいかないことがあるかもしれないので検索して自分の形に合ったディレクトリを見つけることが重要である.