Java コンパイル時のソースパスとクラスファイル出力先を指定する

Java ソースコードのツリーと生成物のツリーを分ける

Java のパッケージ」で説明したようにパッケージを使ってファイルを整理していくと、 ソースツリーの階層構造が深くなりがちです。

それと同時に、デフォルトの設定ではソースファイルと同じディレクトリ内にクラスファイルが生成されるため、 コンパイルの結果生成されるクラスファイルもあちこちに散らばってしまいます。

ソースファイルと、生成物であるクラスファイルは、それぞれ別のディレクトリツリーとしたほうが管理が簡単なことが多いです。

ここでは Java のソースコードのコンパイル時に、ソースパスやクラスファイルの出力先を指定する方法を説明します。

Java ソースコードの準備とディレクトリ構造

ここでは具体的にコンパイルを実行するために、ソースコード TestApp.javaPerson.java を次のように準備します。

package com.keicode;
import com.keicode.models.Person;

public class TestApp {
  public static void main(String[] args) {
    Person p = new Person(20, "John Doe");
    p.printName();
    p.printAge();
  }
}

Person.java は次の通りです。

package com.keicode.models;

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);
  }
}

ディレクトリの関係は次のようにします。

tree
.
└── src
    └── com
        └── keicode
            ├── TestApp.java
            └── models
                └── Person.java

4 directories, 2 files

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

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

javac ./com/keicode/TestApp.java

もし src ディレクトリの親ディレクトリで javac を実行するなら、-sourcepath オプションを指定します。

javac -sourcepath src src/com/keicode/TestApp.java

-sourcepath を指定しない時には、クラスを発見するためにクラスパスを探します。

コンパイルの結果、 *.class ファイルがソースファイル *.java ファイルと同じ場所に作成されます。

tree
.
└── com
    └── keicode
        ├── TestApp.class
        ├── TestApp.java
        └── models
            ├── Person.class
            └── Person.java

3 directories, 4 files

デフォルトではソースパスと同じ場所にクラスファイル (*.class) が生成されます。

クラスファイルの出力場所を指定

-d オプションを使うと、クラスファイルを出力するディレクトリを指定することができます。

javac -d out -sourcepath src src/com/keicode/TestApp.java

この結果、*.class ファイルはソースツリーとは別のツリーに出力されます。

tree
.
├── out
│   └── com
│       └── keicode
│           ├── TestApp.class
│           └── models
│               └── Person.class
└── src
    └── com
        └── keicode
            ├── TestApp.java
            └── models
                └── Person.java

8 directories, 4 files

以上で、コンパイル時のソースパスの指定方法と、クラスファイルの出力場所の指定方法を説明しました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Java 入門