- Home ›
- Apache Antの使い方 ›
- Javaタスク(実行) ›
- HERE
javaタスク
ここではコンパイルされたプログラムをAntから実行する方法について見ていきます。「java」タスクを使います。
「Java」タスクでも数多くの属性が用意されていますが、基本となるのは下記の属性です。
属性 | 説明 | 必須 |
---|---|---|
classname | 実行するJavaのクラス | classnameかjarのどちらかが必須 |
jar | 実行するjarファイルの場所(forkがtrueである必要があります) | classnameかjarのどちらかが必須 |
classpath | 使用するクラスパス | × |
fork | クラスの実行を別のVMで行います | × |
実行するクラスファイル名を「classname」属性で指定するか、または「jar」属性でjarファイルを指定してください。クラスファイル名は拡張子は付けずに指定します。(test.classだったらtest)。
また実行するクラスが置かれているディレクトリを「classpath」属性で指定します。
では実際に試してみましょう。今回の構成は下記のようになっています。
-sample5 build.xml | +--src test.java | +--class test.class
Antではコンパイルして実行させるようにしてみます。
コンパイルするプログラムファイルは下記です。
public class test{ public static void main(String args[]){ System.out.println("Antの実験です"); } }
<?xml version="1.0" encoding="Shift_JIS"?> <project name="antsample" default="compile"> <target name="compile"> <javac srcdir="./src" destdir="./class" /> </target> <target name="exec"> <java classname="test" classpath="./class" /> </target> </project>
ではantを実行してみます。今回は「compile」ターゲットの後に「exec」ターゲットを実行します。
上記のようにコンパイル後に実行が行われます。
同じディレクトリが繰り返し使われていますので、プロパティを用いて下記のように記述してもいいと思います。
<?xml version="1.0" encoding="Shift_JIS"?> <project name="antsample" default="compile"> <property name="src" location="./src"/> <property name="class" location="./class"/> <target name="compile"> <javac srcdir="${src}" destdir="${class}" /> </target> <target name="exec"> <java classname="test" classpath="${class}" /> </target> </project>
depends属性を使う
またJavaを実行する前にコンパイルが必ず行われるようにするには、ターゲット要素の「depends」属性を使って下記のように記述しておけば、「exec」ターゲットだけ実行するだけでよくなります。
<?xml version="1.0" encoding="Shift_JIS"?>
<project name="antsample" default="compile">
<property name="src" location="./src"/>
<property name="class" location="./class"/>
<target name="compile">
<javac srcdir="${src}" destdir="${class}" />
</target>
<target name="exec" depends="compile">
<java classname="test" classpath="${class}" />
</target>
</project>
このようにした場合は「exec」ターゲットだけを実行すれば、もしコンパイルが先に行われていなければまず「compile」ターゲットが実行されてから「exec」ターゲットを実行します。
( Written by Tatsuo Ikura )