Peta Walkers

HOME: 開発日記

2003.09.28(日) - ペタクローンをAntビルドに移行する

 今までjarの作成はバッチファイルでやってきたけど、今後のことを考えてAntビルドを導入してみようと思う。

資料集め

 今回の環境。

 EclipseにはAntが付属しているからインストールする必要はないみたいだな。よし、始めよう。

ソースフォルダを分ける

 Antとは直接関係無いが、プロジェクトフォルダをそのままソースフォルダとして使っていたので、この機会にソースとクラスのフォルダを分けることにしよう。

 Eclipseは終了しておく。作業の前に念のためペタクローンのプロジェクトフォルダをバックアップした。これで安心。

ソースとクラスを分ける仕組み

 実は仕組みがよくわからないのでプロジェクトフォルダに入っている設定ファイルを開いてみる。 どうやら.classpathがそれらしいことがわかった。 ソースはsrc、クラスはbinに入れることにしよう。

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="var" path="JRE_LIB" sourcepath="JRE_SRC"/>
    <classpathentry kind="lib" path="swt.jar"/>
    <classpathentry kind="lib" path="MobTaskTray.jar"/>
    <classpathentry kind="var" path="JUNIT_LIB"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

 それらしいところを書き換えて保存。

ファイルを移動

 "jp"フォルダ(ペタクローンはjp.takayuki.*のパッケージを持っている)をsrcに移動。

 Eclipseを起動するとソースフォルダの表示が反映されていない。 プロジェクトフォルダで「最新表示」を選んで更新した。 プロジェクトが再ビルドされる…よし、srcフォルダが表示された。ペタクローンの起動もうまくいく。

 jpフォルダの中にある古いクラスファイルは必要ないので削除した。これも問題なし!

 これでOK。

build.xmlを書く

 Antにビルドを指示するためにxmlファイルを用意しよう。build.xmlはAntのデフォルトのビルドファイル名だ。

 コンパイル、Jarファイルの生成をAntで実行することにしよう。とりあえず書いてみた。

<?xml version="1.0" encoding="Shift_JIS"?>
<project name="Petaclone" default="compile" basedir=".">
    <property name="src" location="src" />
    <property name="bin" location="bin" />
    <property name="dist" location="petaclone.jar" />

    <!-- ■リソース -->
    <target name="resource">
        <native2ascii
            src="${src}"
            dest="${bin}"
            includes="**/*.Shift_JIS"
            ext=".properties" />
    </target>

    <!-- ■コンパイル -->
    <target name="compile" depends="resource">
        <mkdir dir="${bin}" />
        <javac srcdir="${src}" destdir="${bin}" source="1.4" />
            <classpath>
                <pathelement location="swt.jar" />
                <pathelement location="MobTaskTray.jar" />
                <pathelement location="junit.jar" />
            </classpath>
    </target>
    
    <!-- ■jar -->
    <target name="makejar" depends="compile">
        <delete file="${dist}" />
        <jar
            destfile="${dist}"
            basedir="${bin}"
            manifest="manifest.txt"
            excludes="test/**" />
    </target>
    
    <!-- ■クラスファイルの削除 -->
    <target name="clean">
        <delete dir="${bin}" />
        <mkdir dir="${bin}" />
    </target>
    
    <!-- ■すべて再ビルド -->
    <target name="rebuild" depends="clean,compile" />
</project>

 せっかくなのでnative2asciiタスクを使ったり、再ビルドのターゲットも用意した。

トラブル

 native2asciiのタスクで例外が出る。native2asciiとantで検索してみる。 どうやらEclipse上ではクラスパスを通すと良いようだ。

build.xml内で<native2ascii>タスクを使用している場合、sun.tools.native2ascii.Mainが 見つからないというエラーが表示される場合があります。そのような場合は、「ウィンドウ」-「設定」-「Ant」-「ランタイム」を選択し、「ランタイ ム・クラスパス」に「$JAVA_HOME/lib/tools.jar」を追加してから、再度Antを実行します。 - (Eclipse)antでnative2asciiを使う

 でもまだ動かない。なぜだ。Antの実行結果にはUnsupportedVersionExceptionと表示されているのでバージョンが合わないんだろう。 Eclipseの[ヘルプ]-[Eclipse Platformについて]を選んで「構成の詳細」を確認してみた。 すると2週間ほど前にインストールしたOracle試用版に付属していたJava1.3がデフォルトのVMになっているじゃないか。 これは環境変数PATHをJava1.4.2が先に見つかるように変更して対処した。

EclipseのAntサポート

Antビュー

 [ウィンドウ]-[パースペクティブのカスタマイズ...]-[ウィンドウ>ビューの表示]でAntを選ぶとAntビューを利用できるようになる。ここから任意のターゲットを実行できる。

 一度ビューを閉じてしまうと追加したビルドファイルが消えてしまうのが残念。

Ant Editor

 今日は普通のテキストエディタでbuild.xmlを書いた(実際はほとんどコピペ)が、Eclipse上でbuild.xmlを開くとAnt Editorが使える。 タグのカラー表示はもちろん、文法チェックやコードアシストまでやってくれる。

アウトラインビュー

 Javaのフィールドやメソッドの一覧を表示するアウトラインビューにはプロパティーとターゲットが表示されるからビルドファイルが多少大きくなっても安心。

やっぱり最新版のAntを使う

 Eclipse2.1.1に付属のAntは1.5.3で、これを書いている時点での最新版は1.5.4。やはり新しいのを使いたくなるのが人情というものだ。

 [ウィンドウ]-[設定]-[Ant]-[ランタイム]-[クラスパス]の[ANT_HOMEの設定]で任意のAntが利用できるみたいだね。さっそくやってみよう!

 が、Xercesでjava.lang.VerifyErrorが発生してEclipse上ではうまくいかなかった。

Incompatible type for getting or setting field

 EclipseのXercesとバージョンが合わないらしい。無理して使う必要もないよね。

 とにかく、これでペタクローンをAntビルドに移行できた。 コンパイルはEclipseが今までどおり自動でやってくれるし、今のところAntに移行した利益は無いけど、そのうち役に立つだろう。 今日はここまで。

HOME: 開発日記