コンパイル処理(複数の場所にあるファイルをまとめて処理)

広告

コンパイルを行う時に、1つのディレクトリ(及びそのサブディレクトリ)に含まれるファイルだけではなく、複数のディレクトリにまたがってまとめてコンパイルを行うことが出来ます。複数のディレクトリを指定する場合は「srcdir」属性にコロン(:)またはセミコロン(;)で区切って複数のディレクトリを指定します。

例えばカレントディレクトリの中に「src」というディレクトリと「src2」というディレクトリがあり、両方のディレクトリに含まれる全てのファイルをコンパイルする場合の記述は下記のようになります。

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

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

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

</project>

では実際に試してみましょう。下記では「src」ディレクトリ内に"test.java"というファイルが1つ、「src2」ディレクトリ内に"test2.java"と"test3.java"というファイルが入っています。

-sample3       build3.xml
  |
  +-- src      test.java
  |
  +-- src2     test2.java
  |            test3.java
  |
  +-- class    クラスファイルの置き場所

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

build3.xml

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

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

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

</project>

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

複数のディレクトリにまたがったファイルをまとめてコンパイル

対象となるファイルが3ファイルあり、コンパイルされたことが表示されています。また実際にクラスファイルも3つ作成されていました。

<src>要素を使った指定

ソースファイルが置かれているディレクトリの指定は属性として指定する以外にも<src>要素を使って指定することも可能です。先ほどのbuild.xmlは下記のように書き換えることが出来ます。

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

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

  <target name="compile">
    <javac destdir="./class">
      <src>
        <pathelement path="./src"/>
        <pathelement path="./src2"/>
      </src>
    </javac>
  </target>

</project>

今までは「javac」要素内に何も含まれていませんでしたので1行でまとめて記述していましたが、「src」要素は「javac」要素内に含まれる子要素ですので、<javac></javac>内に記述します。

「src」要素はさらに子要素として「pathelement」要素を持ちます。実際にコンパイルの対象としたいディレクトリは「pathelement」要素の中の「path」属性にて指定して下さい。

では一応試しておきます。先ほどのbuildファイルをbuild4.xmlとして保存しAntを実行してみます。

build4.xml

実行結果は下記の通りです。

複数のディレクトリにまたがったファイルをまとめてコンパイル

( Written by Tatsuo Ikura )