Apache Antの使い方

Apache Antの使い方

Apache Antをダウンロードします。

Apache Ant - Welcome

ダウンロードしたら、C:[インストールディレクトリ]\binにPathを通します。

パスが通っているかは以下で確認します。

C:\>ant -version
Apache Ant(TM) version 1.8.2 compiled on December 20 2010

デフォルトのbuild.xmlの場所は、-fileオプションで指定します。

C:\>ant -file D:\sample\build.xml

以下、例です。

<?xml version="1.0" encoding="UTF-8"?>
<project name="Sample" default="clean" basedir=".">
<property name="webapp" value="${basedir}/webapp"/>
<property name="compile.dest" location="${webapp}/WEB-INF/classes"/>
<!-- =================================
target: clean
================================= -->
<target name="clean" description="clean up">
<delete dir="${compile.dest}"/>
</target>
</project>

<delete dir=ディレクトリ名/>で、指定のディレクトリを削除します。以下、例です。

<delete dir="C:\test\" />

javacコマンドのよくあるエラーです。

Unable to find a javac compiler;

環境変数にJAVA_HOMEを追加します。

Pathに「%JAVA_HOME%\bin」を追加し、コマンドラインを立ち上げなおすと解決します。antのbinよりも前にこのパスを追加します。

[javac] D:\~~\Sample.java:163: シンボルを見つけられません。
[javac] シンボル: クラス Logger
[javac] 場所 : jp.co.confrage.Sample の クラス
[javac] public static void setLogger(Logger logger) {
[javac]                              ^

クラスパスが通ってない場合に上記エラーとなります。

<javac srcdir="${compile.src}" destdir="${compile.dest}" encoding="UTF-8"
includeantruntime="false">
<classpath>
<fileset dir="${webapp}/WEB-INF/lib">
<include name="*.jar"/>
</fileset>
</classpath>
</javac>

javac内でclasspathを通します。

<?xml version="1.0" encoding="UTF-8"?>
<project name="Jenkins" default="compile" basedir=".">
<property name="webapp" value="${basedir}/webapp"/>
<property name="compile.src" location="${basedir}/src/jp/co/confrage/"/>
<property name="compile.dest" location="${webapp}/WEB-INF/classes"/>
<!-- =================================
target: clean
================================= -->
<target name="clean" description="clean up">
<delete dir="${compile.dest}"/>
</target>
<!-- =================================
target: compile
================================= -->
<target name="compile" depends="clean">
<mkdir dir="${compile.dest}"/>
<javac srcdir="${compile.src}" destdir="${compile.dest}" encoding="UTF-8"
includeantruntime="false">
<classpath>
<fileset dir="${webapp}/WEB-INF/lib">
<include name="*.jar"/>
</fileset>
</classpath>
</javac>
</target>
</project>

このファイルでantを実行します。

C:\>ant -file D:\sample\build.xml

以下のメッセージが表示されればビルドOKです。

BUILD SUCCESSFUL
Total time: 26 seconds

zipで圧縮する

Antのzipタスクで圧縮することができます。

<zip destfile="${server_dir}/${module_name}.zip"
basedir="${server_dir}/${module_name}"
update="yes"
/>

update=”yes”とすると、既に同名の圧縮ファイルが存在する場合、上書きされるようです。

が、Ant1.8.2でテストすると、上書きしてくれません。

update=”true”としても、上書きはしてくれません。

代替案として、ファイル削除してから圧縮します。

ファイル(フォルダ)を削除する

<delete file="${server_dir}/${module_name}.zip"/>

上記でファイルを削除することができます。

ファイル内の文字列を置換する

replaceタスクでファイル内の特定の文字を置換することができます。

<replace file="a.txt" token="aaa" value="bbb" />

上記は、a.txt内のaaaという文字列をbbbに全部変換します。

コピーする

copyタスクでtodir属性でコピー先を指定し、<copy>~</copy>内でコピー元を指定します。

<copy todir="${dest}">
  <fileset dir="${src}"/>
</copy>

コピー時に「due to can’t write to read-only destination file」とエラーが出たら読み取り専用の為にコピーが出来ないというエラーなので、force=true属性を追加します。(Ant1.8.2より追加された属性)

<copy todir="${dest}" force="true">
  <fileset dir="${src}"/>
</copy>

コピー時に特定ファイルを除外する

コピーする時に特定のファイルのみコピーしたくない場合があります。

そういう場合は

<copy todir="${dest}" >
<fileset dir="${src}" excludes="**/a.properties"/>
</copy>

excludes=で指定します。この時、「**/ファイル名」とします。これでa.propertiesのみコピーされません。

Antのメモリサイズを増やす

環境変数を指定することにより、Antが使用するメモリを指定することができます。

JenkinsでAntを使用するとUNCがサポートされない不具合がある

なんとJenkins2.46.1+Ant Plugin1.4で、UNCがサポートされないという致命的な不具合があります。

JenkinsのUNC不具合は以下でなおっているので、Ant Plugin1.4のバグかと思われます。

Jenkins Jira

Unable to locate tools.jar. Expected to find it

Ant実行時に「Unable to locate tools.jar. Expected to find it」とエラーが出たら、%JAVA_HOME%を環境変数に設定されていないのが原因です。

%JAVA_HOME%を設定することでこのエラーは出なくなります。

C:\Documents and Settings\Administrator>ant -version
Apache Ant(TM) version 1.8.2 compiled on December 20 2010

C:\Documents and Settings\Administrator>

変数名をデバッグする

Antのbuildファイルが複雑になると、変数がわけわからなくなってきます。

こういうときは-debugオプションを使用します。

ant -debug

これで定義した変数全てが何を表わしているかすべて表示されます。

echoタスクを使用する

echoタスクを使用するとデバッグなどに便利です。

<echo message="${変数名}"/>

とすると変数名が出力されます。

<echo message="test"/>

とすると、testと出力されます。コメントなどのしようにも便利かもしれません。

バッチファイルからantを実行する場合はcallする

バッチファイルでantを実行する場合があると思います。

が、これをしてしまうと、ant実行後の後続処理が実行されません。

そのため、バッチファイルでantを実行する際は必ず以下のようにcallします。

call ant -file build.xml

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました