Java 入門

ホーム > Java の基本 > パッケージとコンパイル

パッケージとコンパイル

Java のパッケージについては、「Java の package (パッケージ) とは?」で説明しました。

要はソースコードとクラス名をディレクトリに整理し、名前の干渉を防ぐ仕組みでしたね。

非常に小さなプログラムならいざ知らず、ある程度規模の大きなプログラムになると、ディレクトリに分けてソースコードを管理するのは必須です。

ここでは、パッケージの活用時に、複数のディレクトリにソースコードを分割保存した場合に、コンパイルをどのように実施できるか説明します。

基本的なコンパイル方法は既に説明済みとしているので、わからないという人は「簡単な Java プログラムのコンパイルと実行」を読んでから戻ってくると良いでしょう。

ソースパスを指定してコンパイルする

package com.keicode.java.testapp;

import com.keicode.java.testapp.entities.Person;

public class TestApp {

	public static void main(String[] args) {
		Person p = new Person(25, "Ryan");
		p.printName();
		p.printAge();
	}
	
}

ここで利用されている Person クラスは次の通りとします。

package com.keicode.java.testapp.entities;

public class Person {
	private int age;
	private String name;
	
	public Person(int age, String name){
		this.age = age;
		this.name = name;
	}
	
	public void printName(){
		System.out.println(this.name);
	}
	
	public void printAge(){
		System.out.println(this.age);
	}
	
}

ここで、TestApp.java と Person.java の両ソースファイルは次のようなディレクトリ構造に配置しています。

これをコンパイルするには、src ディレクトリにて、次のようにします。

javac .\com\keicode\java\testapp\TestApp.java

もし src ディレクトリの親ディレクトリで javac を実行するなら、-sourcepath を指定して次のようにします。

javac -sourcepath src src\com\keicode\java\testapp\TestApp.java

もし、これを指定しないと既定のクラスパスは現在のディレクトリですから、TestApp.java から Person を参照したときに、 .\com\keicode\java\testapp\entities\Person.java を探すため、 Person.java が見つからずエラーとなります。

生成されたクラスファイルの配置場所指定

デフォルトではソースパスと同じ場所に *.class ファイルが生成されます。すなわち、ソースファイルとコンパイラによって自動生成されたファイルが同じ場所に存在することになり、ソースコードの管理が煩雑になります。

上の例では TestApp.class は src\com\keicode\java\testapp\TestApp.class に配置されます。ディレクトリの名前は src であって、いかにもソースコードが置かれてそうな場所の配下に、ソースではないファイルが作成されてしまいます。

この問題を避けるため、ソースパスと自動生成されるファイルを分けることが望ましいです。

-d でコンパイルの結果生成された *.class ファイルを配置するディレクトリを指定することができます。

上の例では、次のようにすると src と同じレベルに作成した bin ディレクトリ以下に、com\keicode\java\testapp\entities というディレクトリ構造が作成され、 *.class ファイルが配置されます。

javac -d ..\bin com\keicode\java\testapp\TestApp.java

もちろん -d オプションと -sourcepath オプションを同時に指定することも出来ます。

ホーム > Java の基本 > パッケージとコンパイル