暮らしのワンポイント・クラスパス †
雪は止んで晴れてはいるが、雪はだいぶ積もった。今日は朝から新検見川の新居から柏の自宅まで国道16号線を使って帰ったが、7:30に出発して12:30に着、なんと4時間もかかった。雪おそるべし。
暮らしのワンポイント、今日はクラスパスについてです。
JVMはクラスをロードする時に、クラスパスを使ってクラスを探します。クラスパスで指定したフォルダは構造化されている必要があります。例としてHelloWorldクラスをjp.hutcraft.helloパッケージに作ったとしましょう。以下のフォルダ構成で、srcをクラスパスに指定した場合、jp.hutcraft.hello.HelloWorldは正しく読めます。
hello_world_project
+src <-- classpath
+jp
+hutcraft
+hello
+HelloWorld.class
間違えてhello_world_projectを指定した場合、HelloWorldは src.jp.hutcraft.helloパッケージに入っていることになってしまうので、正しくロードできません。
hello_world_project <-- classpath
+src
+jp
+hutcraft
+hello
+HelloWorld.class <-- src.jp.hutcraft.hello.HelloWorld
クラスパスは複数指定することもできます。よくある使い方は、テスト用のパッケージを作ることです。
hello_world_project
+src <-- classpath
| +jp
| +hutcraft
| +hello
| +HelloWorld.class <--- jp.hutcraft.hello.HelloWorld
+srctest <-- classpath
+jp
+hutcraft
+hello
+HelloWorldTest.class <--- jp.hutcraft.hello.HelloWorldTest
HelloWorldクラスとHelloWorldTestは同じパッケージとして扱われます。ということは、HelloWorldクラスでprotected宣言した部分をHelloWorldTestクラスから参照できます。srctestにjp.hutcraft.hello.HelloWorldというクラスを作ることはできません。
srctestというテスト用パッケージを新たに作ることで、テストコードを隔離することができました。srcパッケージだけアーカイブすると、テストクラスを含まずにすみますね。