javacタスク

広告

では最も重要なコンパイル処理を行う方法について確認していきます。「javac」タスクを使います。

「javac」タスクでは多くの属性が用意されていますが、基本となるのは下記の3つです。

属性説明必須
srcdirソースが置かれたディレクトリ必須
destdirクラスファイルを保存するディレクトリ×
classpath使用するクラスパス×

「src」属性にはソースファイルが置かれているディレクトリを指定します。このディレクトリ内及び全てのサブディレクトリ(階層が深くなっても全てのディレクトリを再帰的に検索してくれます)内にある全てのJavaソースファイルがコンパイルの対象となります。ディレクトリの指定はbuild.xmlファイルが置かれている位置からの相対パスか絶対パスで指定します。

「destdir」属性にはコンパイル後に作成されたクラスファイルを設置するディレクトリを指定します。

「classpath」属性にはコンパイル時に指定するクラスパスがある場合に記述します。

例えば下記のような記述となります。

<?xml version="1.0" encoding="Shift_JIS" ?>

<project name="antsample" default="compile">

  <target name="compile">
    <javac srcdir="./src" destdir="./class" />
  </target>

</project>

では実際に試してみます。コンパイルの対象として下記の簡単なJavaソースファイルを用意しました。

test.java

antを実行するディレクトリにbuild1.xmlを設置します。同じディレクトリ内に「src」ディレクトリを作成し、その中に先ほどの「test1.java」を設置します。またコンパイル後に作成されるクラスファイルの置き場所としてbuild.xmlが置かれているディレクトリ内に「class」ディレクトリを作成しました。

-sample1       build1.xml
  |
  +-- src      test.java
  |
  +-- class    クラスファイルの置き場所

build1.xmlは下記の通りです。

build1.xml

<?xml version="1.0" encoding="Shift_JIS" ?>

<project name="antsample" default="compile">

  <target name="compile">
    <javac srcdir="./src" destdir="./class" />
  </target>

</project>

ではantを実行してみます。

AntでのJavacタスク

上記のように「BUILD SUCCESSFULL」と表示されれば無事ビルドは成功です。実際に「class」ディレクトリに移動してクラスファイルがあるかどうか確認してみます。

AntでのJavacタスク

「class」ディレクトリ内に「test.class」ファイルが作成されています。

ソースファイルのディレクトリの階層

「srcdir」属性に指定したディレクトリは、そのディレクトリだけが対象ではなく、そのディレクトリに含まれる全てのサブディレクトリが対象となります。

例えば下記のように「src」ディレクトリの中にいくつかのサブディレクトリが存在し、その中にJavaソースファイルが含まれていた場合を考えてみます。

-sample2              build1.xml
  |
  +-- src             test.java
  |    |
  |    +-- sub1       sub1.java
  |    |
  |    +-- sub2       sub2.java
  |         |
  |         +--sub3   sub3.java
  |
  +-- class           クラスファイルの置き場所

buildファイルは先ほどと同じ「build1.xml」ファイルを使います。これでAntを実行してみましょう。

AntでのJavacタスク

上記のように「srcdir」属性で指定したディレクトリだけではなく、全てのサブディレクトリに含まれるソースファイルを全てコンパイルしてくれます。(コンパイルした結果作成されたクラスファイルは、元のソースファイルがどのディレクトリにあったとしても全て「destdir」属性で指定したディレクトリに格納されます)。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)