分かってるようで分かってない「Ant」をちゃんと学ぶ
Antとは・・
Jakartaプロジェクトで開発されているJavaベースのビルドツール。
・インストールの際に設定しておいた方が良い環境変数
- ANT_HOME : Antがインストールされているディレクトリ
- JAVA_HOME : JDKがインストールされているディレクトリ
- PATH : Antの実行ファイルの場所を追加
・Antの実行
↓Antの書式
ant [options] [target [target2 [target3] ...]] Options: -help, -h ヘルプメッセージを表示します -projecthelp, -p プロジェクトに関する情報を表示します -version Antのバージョンを表示します -diagnostics 診断や問題のレポートに役立つ情報を表示します -quiet, -q なるべくメッセージを表示しないでビルドします -verbose, -v 詳細な進行状況を表示しながらビルドします -debug, -d デバッグ情報を表示します -emacs, -e 装飾なしのログ情報を生成します -lib <path> jarやクラスを検索するパスを指定します -logfile <file> ログを出力するファイルを指定します -l <file> '' -logger <classname> ログを実行するクラスを指定します -listener <classname> 指定したクラスのインスタンスをプロジェクトリスナとして追加します -noinput 対話的入力を許可しません -buildfile <file> ビルドファイル名を指定します -file <file> '' -f <file> '' -D<property>=<value> プロパティー値を設定します -keep-going, -k 失敗したターゲット(複数)に依存しないターゲットを全て実行します -propertyfile <name> 全てのプロパティーをファイルからロードします。 -Dで指定したプロパティーより優先されます -inputhandler <class> 入力リクエストを扱うクラスを指定します -find <file> 親ディレクトリを順にたどってビルドファイルを探します -s <file> '' -nice number スレッドの優先順位を指定します 1 (低) ~ 10 (高); デフォルト:5 -nouserlib ${user.home}/.ant/lib にあるJARファイルを参照せずに Antを実行します -noclasspath CLASSPATHを参照せずにAntを実行します -autoproxy (Java1.5以上) OSのプロキシ設定を利用します -main <class> Antのノーマルエントリポイントを上書きします
単に「ant」を叩くとカレントディレクトリのbuild.xmlを実行しようとする。
build.xmlを指定する場合は「-buildfile」オプションが必要
・ビルドファイルの構成
大きく分けて「プロジェクト」「ターゲット」「タスク」が必要
例)
組み込みプロパティについて
※そのたJavaのSystem.getProperty()メソッドで取得できるプロパティも全て
組み込みプロパティとして利用可能 例) ${os.name}
ターゲット
赤字・・よく使う
・データ構造
データ構造の種類
パターンセット(PatternSet)
ファイルセット(FileSet)
・実際にbuild.xmlを書いてみる。
上記のbuild.xmlでちゃんとビルドできることを確認^^
が、ここでめっちゃハマったポイントがっorz
プロパティでsrc, test.srcを宣言しているが、同ディレクトリでやろうとしていた為
エラーが多発してしまってました。。
また、src, test.srcにjavaファイルまでのフルパスを書いていた為、テスト時にクラスローダーでこけていました。orz
ダメな例) src = “${basedir}/src/main/java”
これでビルドすると main.java.XXXX.classではなくただのXXXX.classになってしまう。
参考URL
http://www.techscore.com/tech/Java/ApacheJakarta/Ant/index/
http://symfoware.blog68.fc2.com/blog-entry-993.html
http://dev.classmethod.jp/etc/jenkins/
build.xmlを指定する場合は「-buildfile」オプションが必要
・ビルドファイルの構成
大きく分けて「プロジェクト」「ターゲット」「タスク」が必要
例)
<
project
name
=
"sample_project"
default
=
"compile"
basedir
=
"."
>
<
property
name
=
"srcdir"
value
=
"./src"
>
<
target
name
=
"compile"
>
<!-- ここにコンパイルを実行するタスクを記述 -->
</
target
>
<
target
name
=
"install"
depends
=
"compile"
>
<!-- ここにインストールを実行するタスクを記述-->
</
target
>
</
project
>
組み込みプロパティについて
プロパティ名 | プロパティ値 |
basedir | project要素のbasedir属性で設定されているベースディレクトリの絶対パス |
ant.file | ビルドファイルの絶対パス |
ant.version | Antのバージョン |
ant.project.name | 現在実行しているプロジェクトの名前 |
ant.java.version | Java仮想マシンのバージョン |
組み込みプロパティとして利用可能 例) ${os.name}
ターゲット
属性名 | 説明 |
必須
|
name | ターゲットの名前。 |
●
|
depends | このターゲットを実行する前に必ず実行しなければいけないターゲット。カンマで区切って複数指定することができます。 | |
if | このターゲットを実行するために設定されてなければいけないプロパティの名前。もしここで指定したプロパティに何も値が設定されていなければ、ターゲットのタスクは実行はされません。 | |
unless | このターゲットを実行するために設定されていてはいけないプロパティの名前。もしここで指定したプロパティに何か値が設定されていれば、ターゲットのタスクは実行されません。 | |
description | このターゲットの機能の簡単な説明。Ant を -projecthelp オプションで起動したときに、ここで指定した説明が表示されます。 |
・データ構造
データ構造の種類
データ構造 | 説明 |
---|---|
Filelist | ファイル名を列挙することで表現するファイルの集合です。 |
Fileset | パターンやセレクタ等を用いて選択されるファイルの集合です。 |
Patternset | パターンの集合を表します。 |
パス類似構造 | PATHやCLASSPATHを指定するために用いられます。 |
リソース | ファイルまたはファイルに似たものを抽象化した概念です。 |
リソースコレクション | リソースの集合です。バージョン1.8以降、FileListなど従来のデータ構造はリソースコレクションの一種という扱いになりました |
セレクタ | Filesetにおいて、ファイル名以外の基準でファイルの集合を選択する場合に用いられます。 |
パターンセット(PatternSet)
属性名 | 説明 | 必須 |
---|---|---|
includes
| 集合に含めたい名前のパターン。コンマ区切りまたはスペース区切りで複数のパターンを記述することができます。省略時はすべてのファイルが含まれたとみなされます。 | |
includesfile
| 集合に含めたい名前のパターンを記述したファイル。 | |
excludes
| 集合から除外したい名前のパターン。コンマ区切りまたはスペース区切りで複数のパターンを記述することができます。省略時は何も除外されません。 | |
excludesfile
| 集合から除外したい名前のパターンを記述したファイル。 | |
refid
| 別の場所で定義されたパターンセットを参照するときに用います。参照されるパターンセットは、id属性で名前が定義されていなければいけません。(この表にはid属性を書いていませんが、id属性はすべてのデータ構造要素で用いることができます。) |
ファイルセット(FileSet)
属性名 | 説明 | 初期値 | 必須 |
---|---|---|---|
dir
| ファイル集合のベースディレクトリです。 |
●
| |
defaultexcludes
| デフォルト除外集合をファイル集合から除外するかどうかを指定します。 |
yes
| |
includes
| FileSetに含めたいファイルのパターン。 | ||
includesfile
| FileSetに含めたいファイルのパターンを記述したファイル。 | ||
excludes
| FileSetから除外したいファイルのパターン。 | ||
excludesfile
| FileSetから除外したいファイルのパターンを記述したファイル。 | ||
casesensitive
| 英文字の大文字と小文字を区別するかどうかを指定します。 |
true
| |
followsymlinks
| シンボリックリンクをたどるかどうかを指定します。 |
true
|
・実際にbuild.xmlを書いてみる。
<?xml version="1.0" encoding="UTF-8" ?>
<project name="AntSample" default="release" basedir=".">
<!-- メインのビルド関連プロパティ -->
<property name="src" location="${basedir}/src"/>
<property name="build" location="${basedir}/build"/>
<!-- テストのビルド関連プロパティ -->
<property name="test.src" location="${basedir}/test"/>
<property name="test.build" location="${basedir}/test_build"/>
<property name="test.report" value="${basedir}/report"/>
<!-- テスト用クラスパス -->
<path id="test.classpath">
<pathelement location="${build}" />
<pathelement location="${test.build}" />
<pathelement location="lib/junit.jar" />
<pathelement location="lib/org.hamcrest.core_1.3.0.v201303031735.jar" />
</path>
<!-- 初期化 -->
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<mkdir dir="${build}"/>
<mkdir dir="${test.build}"/>
<mkdir dir="${test.report}"/>
</target>
<!-- コンパイル -->
<target name="compile" depends="init" description="compile the source " >
<!-- メインをコンパイル -->
<javac srcdir="${src}" destdir="${build}" includeAntRuntime="no"/>
<!-- テストをコンパイル -->
<javac srcdir="${test.src}" destdir="${test.build}" includeAntRuntime="no">
<classpath refid="test.classpath" />
</javac>
</target>
<!-- テスト実行 -->
<target name="test" depends="compile" description="test the source " >
<!-- レポートファイルを削除 -->
<delete>
<fileset dir="${test.report}" includes="TEST-*"/>
</delete>
<!-- JUnitによるテストを実行 -->
<junit fork="yes" haltonfailure="false">
<classpath refid="test.classpath" />
<formatter type="xml" usefile="true" />
<batchtest fork="yes" todir="${test.report}">
<fileset dir="${test.src}">
<include name="**/*Test.java"/>
</fileset>
</batchtest>
</junit>
</target>
<!-- リリース -->
<target name="release" depends="test" description="generate the release files" >
</target>
<!-- クリーン -->
<target name="clean" description="clean up" >
<delete dir="${build}"/>
<delete dir="${test.build}"/>
<delete dir="${test.report}"/>
</target>
</project>
上記のbuild.xmlでちゃんとビルドできることを確認^^
が、ここでめっちゃハマったポイントがっorz
プロパティでsrc, test.srcを宣言しているが、同ディレクトリでやろうとしていた為
エラーが多発してしまってました。。
また、src, test.srcにjavaファイルまでのフルパスを書いていた為、テスト時にクラスローダーでこけていました。orz
ダメな例) src = “${basedir}/src/main/java”
これでビルドすると main.java.XXXX.classではなくただのXXXX.classになってしまう。
参考URL
http://www.techscore.com/tech/Java/ApacheJakarta/Ant/index/
http://symfoware.blog68.fc2.com/blog-entry-993.html
http://dev.classmethod.jp/etc/jenkins/
0 件のコメント:
コメントを投稿