Apache Antの使い方
Apache Antをダウンロードします。
ダウンロードしたら、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のバグかと思われます。
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
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント