Java Silverの試験対策として、クラスパスに関する知識を確認しましょう。
問題
以下のプログラムをコンパイルして実行するために必要なコマンドライン引数はどれですか?適切な選択肢を選んでください。
// ファイル構成:
// src/
// └── example/
// ├── HelloWorld.java
// └── utils/
// └── MessageUtil.java
// HelloWorld.java
package example;
import example.utils.MessageUtil;
public class HelloWorld {
public static void main(String[] args) {
MessageUtil.printMessage("Hello, Java!");
}
}
// MessageUtil.java
package example.utils;
public class MessageUtil {
public static void printMessage(String message) {
System.out.println(message);
}
}
選択肢
- A. javac -d bin src/example/HelloWorld.java src/example/utils/MessageUtil.java
- B. javac src/example/HelloWorld.java src/example/utils/MessageUtil.java
- C. java -cp src example.HelloWorld
- D. java -cp bin example.HelloWorld
- E. javac -cp src -d bin src/example/HelloWorld.java
答えと解説
回答を見る
答え
A. javac -d bin src/example/HelloWorld.java src/example/utils/MessageUtil.java
D. java -cp bin example.HelloWorld
解説
基本説明:
Javaのコンパイルと実行において、クラスパス(クラスの検索パス)は非常に重要です。
クラスパスは、Javaプログラムの実行時にどのディレクトリやJARファイルからクラスを読み込むかを指定します。
今回の問題は、ソースコードをコンパイル後、正しくクラスパスを指定して実行する知識が問われます。
誤答理由:
Bの選択肢では、コンパイルされたクラスファイルの出力先が指定されていないためデフォルトの場所に保存されますが、Aのように-dオプションで適切なディレクトリに出力しなくてはなりません。
Eも、-cpオプションが不適切に指定されており、依存するクラスファイルを含んだソースツリー全体を正確に指定する必要があります。
つまずきポイント:
初心者がよく間違える点として、Javaのパッケージ構成およびクラスパスの設定の理解不足が挙げられます。
クラスをパッケージに含める際、コンパイル時に-dオプションを用いることで、パッケージ宣言に基づくディレクトリ構造に従ってクラスファイルを作成することが重要です。
発展知識:
クラスパスは、JVMが開始されるときに一度だけ設定されます。
実際の開発現場では、クラスパスの指定に環境変数やEclipse、IntelliJ IDEAなどのIDEのプロジェクト設定を用いることが多々あります。
また、MavenやGradleといったビルドツールを用いることで、依存関係の管理やクラスパス設定を自動化できます。