Antでよく使うターゲットの書き方


わかりやすさを優先するため、以下説明ではディレクトリやパスは直接記載しています。一般的には、build.properties等に外出ししたほうがよいです。

## 初期化

ビルド後のモジュールが生成されるディレクトリは、毎回クリーンな状態を保つために、削除して再作成する。

```xml
<target name="clean">
   <delete dir="target" />
   <mkdir dir="target" />
</target>
```

## クラスパスを通す

ターゲットではないが、これも必要となる。
コンパイル等に必要なJarファイルにクラスパスを通す。

```xml
<path id="build.lib">
   <fileset dir="src/main/webapp/WEB-INF/lib" includes="*.jar" />
</path>
```

## コンパイル

ソースコードをコンパイルする。

```xml
<target name="compile">
	<mkdir dir="target/classes"/>
	<javac classpathref="build.lib" srcdir="src/main/java" destdir="target/classes"
		    encoding="utf-8"
           source="1.7"
           target="1.7"
           fork="true"  
           memorymaximumsize="256m"
           includeAntRuntime="false"
           debug="true" 
		   debuglevel="lines,vars,source"/>
</target>
```

javacタスクのオプションの説明

| オプション | 説明 |
|:-----------|:------------|
|classpathref       |クラスパス通したpathのidを指定する。|
|srcdir     |コンパイル対象のソースコードのディレクトリ。ディレクトリが複数ある場合は、スペース区切りで続ける。|
|destdir|コンパイルした結果のクラスファイルの出力先|
|encoding|ソースファイルのエンコード。指定しないと実行環境のデフォルトになってしまう。|
|source|ソースコードが準拠しているのJDKのバージョン。つまり使用している文法のバージョン。例えば、StringBuilderを使用している場合は、1.4を指定するとコンパイルエラーとなる。|
|target|クラスファイルをJVMのどのバージョン用に作るか。例えば、ソースコードは1.5の文法を使用しているが、実行環境は1.4の場合は、このオプションを1.4にしておけば実行可能となる。はず。|
|fork|外部プロセスとしてコンパイラを実行するかどうか。trueにしないと後述のメモリサイズ指定が有効にならないのでtrueにしておく。
|memorymaximumsize|コンパイルで使用するJVMの最大ヒープサイズ。ソースコード量が多いとヒープが足りなくなる時があるので、ここで調整する。|
|includeAntRuntime|クラスパスに、Antのランタイムライブラリを含めるかどうか。余計なライブラリは含まない方がいいので、falseにしておく。|
|debug|クラスファイルにデバッグ情報を埋め込むか否か。trueにしないと、このクラスファイルを実行した時のスタックトレースにソースコードの行番号がでなくなる。|
|debuglevel|デバッグのレベルのようだが詳細不明。lines,vars,sourceを固定で記載しておく|

## ファイル・ディレクトリのコピー

ファイルディレクトリーをコピーする。
環境によってプロパティファイルを変更する場合などに利用できる。

```xml
<target name="copy_properties">
	<copy todir="target/classes" overwrite="true">
		<fileset dir="production/resources" includes="**/*.*" />
    </copy>
</target>
```

## warファイルの作成

warファイルを生成する。
コンパイルターゲットが事前に実行され、target/classesにクラスファイルがあることが前提。

```xml
<target name="war">
        <copy todir="target/war">
            <fileset dir="src/main/webapp" excludes="*/web.xml */lib/ */classes/">
            </fileset>
        </copy>
        <war destfile="target/sample.war" basedir="target/war" 
			 webxml="src/main/webapp/WEB-INF/web.xml">
             <classes dir="target/classes" />
             <lib dir="src/main/webapp/WEB-INF/lib" includes="*.*" />
        </war>
</target>
```

## Javaクラスの実行

Javaのクラスを実行する。
- 指定したクラスはmainメソッドが実装されている必要がある。
- コンパイル後のクラスファイルにもクラスパスが通っていること。
- argでmainメソッドに引数を渡すことができる。 

```xml
<target name="execJava">
	<java classname="jp.co.sample.SampleBatch" classpathref="build.lib" failonerror="true" fork="true">
		<arg value="test" />
	</java>
</target>
```

## CheckStyleを実行する

まず、CheckStyleを実行するためのjarファイルをダウンロードする。

http://checkstyle.sourceforge.net/

zipファイルを解答し、checkstyle-5.6-all.jarとcheckstyle_checks.xmlを任意ディレクトリへ配置。

```xml
<target name="checkstyle">

   <taskdef resource="checkstyletask.properties"     
    classpath="lib/checkstyle/checkstyle-5.6-all.jar" />

    <checkstyle config="checkstyle_checks.xml" failOnViolation="false">
	<formatter type="xml" tofile="checkstyle_report.xml" />
	<fileset dir="src/main/java" includes="**/*.java" />
    </checkstyle>
</target>
```

## Tomcatへのデプロイ

あとで記載する。

## SCPでファイルを転送する

あとで記載する。

## SSHでリモートのシェルを実行する

あとで記載する。

## FindBugsを実行する

あとで記載する。

## Junitを実行する

あとで記載する。

## Subversionへ自動的にコミットする
あとで記載する。