「Ant」タスクいろいろ

Ant に関してまとめてみようということで、手始めにタスクをいろいろと試してみました。その時のメモ。

[ 環境情報 ]
Windows 7 SP1
Java SE 7
Apache Ant 1.8.4

以下のタスクを試しみました。

1. メッセージを表示する
2. .java ファイルを .class ファイルにコンパイル、および、実行する

1 ~ 2 のタスク、まとめて書いてみました。
build.xml

<?xml version="1.0" encoding="Shift-JIS"?>

<project name="SampleProject" default="echo" basedir=".">

  <property name="src" value="src"/>
  <property name="dest" value="dest"/>

  <target name="echo">
    <echo message="echo message !!" />
  </target>

  <target name="compile">
    <javac srcdir="${src}" destdir="${dest}" />
  </target>
  
  <target name="run" depends="compile">
    <java classname="Hello" classpath="${dest}" />
  </target>

</project>


ディレクトリ構成は以下の感じです ( AntSample が作業ディレクトリ )。

AntSample
  - build.xml
  - src
    - Hello.java
  - dest

■ Hello.java

public class Hello {
	public static void main(String[] args) {
		System.out.println("Hello.java");
	}
}


ついでに、以下のようなタスクも試してみました。

3. .class ファイルから .jar ファイルを作成する
4. 上記の .jar ファイル内のクラスを呼び出す .java ファイルをコンパイルし、実行する

build.xml

 - 略 -
  <property name="src" value="src"/>
  <property name="dest" value="dest"/>
  <property name="jar" value="jar"/>

  <target name="jar">
    <javac srcdir="${jar}" destdir="${jar}" />
    <jar basedir="${jar}" jarfile="${jar}\classb.jar" />
  </target>
  
  <target name="compile2">
    <javac srcdir="${src}" destdir="${dest}" classpath="${jar}\classb.jar"/>
  </target>
  
  <target name="run2" depends="compile2">
    <java classname="ClassA" classpath="${dest};${jar}\classb.jar" />
  </target>
  - 略 -

ディレクトリ構成は以下の感じです ( AntSample が作業ディレクトリ )。

AntSample
  - build.xml
  - src
    - ClassA.java
  - dest
  - jar
    - ClassB.java

■ ClassA.java

public class ClassA {
	public static void main(String[] args) {
		ClassB inst = new ClassB();
		inst.method();
	}
}

■ ClassB.java

public class ClassB {
	public void method() {
		System.out.println("ClassB method()");
	}
}


実行は以下のコマンドで。

ant -buildfile build.xml < タスク名 >


ドキュメントは以下になりますね。

・Overview of Apache Ant Tasks
http://ant.apache.org/manual/tasksoverview.html


ちょっと雑な感じになりましたが、以上です。