• 追加された行はこの色です。
  • 削除された行はこの色です。
#keywords(Ant)
#description(JavaベースのビルドツールであるAntの使い方についてメモしています。)
*Ant [#t3b5be0a]
#adsense2
>編集者:[[Terai Atsuhiro>aterai]]~
作成日:2003-09-25~
更新日:&lastmod;
---
keywords: [Ant]
description: JavaベースのビルドツールであるAntの使い方についてメモしています。
author: aterai
pubdate: 2003-09-25
---
#contents
* 概要 [#summary]
`Ant`は、`Java`ベースのビルドツールです。理論的には、`make`の欠点がない`make`の一種です(`Ant`翻訳より引用)。

#contents(none)
このページでは、`Java`ベースのビルドツールである`Ant`の使い方についてメモしています。

**概要(Antとは) [#b59a5f9b]
Antは、Javaベースのビルドツールです。理論的には、makeの欠点がないmakeの一種です([http://www.ingrid.org/jajakarta/ant/ Ant翻訳]より引用)。
* インストールと環境変数の設定 [#environments]
[https://ant.apache.org/ Apache Ant - Welcome]などからダウンロードしたアーカイブを展開して、そこを環境変数`ANT_HOME`に設定します。「システムのプロパティ→詳細設定→環境変数」で、`ANT_HOME`を新規作成、もしくは編集してください。

このページでは、JavaベースのビルドツールであるAntの使い方についてメモしています。
#ref(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQsClLJ428I/AAAAAAAAAs0/B0-VGelgHu4/s800/ant_home.png)

**build.xml、タスクなどのサンプル [#of688f72]
build.xml、タスクなどのサンプルや、その他のちょっとしたTipsなどを、以下別ページにまとめています。
また、`%ANT_HOME%\bin\ant.bat`を使うために、パスを通しておきます。「システムのプロパティ→詳細設定→環境変数」で、`Path`を編集してください。

//#twocolumn
#ref(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQsClNPEp4I/AAAAAAAAAs8/hdtpb5o_pG4/s800/ant_path.png)

***AntのConditionタスクで条件分岐を行う [#aa49e22c]
Conditionタスクを使って、例えばディレクトリの有無などによる条件で、Targetタスクを実行するかどうかを振り分けます。
-[[AntのConditionタスクで条件分岐を行う>Ant/Condition]]
* タスクのサンプル [#of688f72]
`build.xml`、タスクなどのサンプルや、その他のちょっとした`Tips`などを、以下別ページにまとめています。

***AntのScriptタスク中でif文を使った条件分岐を行う [#k88bfb49]
Conditionタスクの条件が複雑になるようなら、<script language="javascript">タスクなどでif文を使う方法もあります。
-[[AntのScriptタスク中でif文を使った条件分岐を行う>Ant/Script]]
** AntのConditionタスクで条件分岐を行う [#Condition]
`Condition`タスクを使って、例えばディレクトリの有無などによる条件で、`Target`タスクを実行するかどうかを振り分けます。

***AntのTaskを自作 [#d8026cb6]
AntのTaskを自作し、これを利用する方法をテストします。
-[[AntのTaskを自作>Ant/Task]]
- [[AntのConditionタスクで条件分岐を行う>Ant/Condition]]

***AntのScriptタスクでJavaScriptを使用する [#b7ff3b37]
AntのScriptタスクでJavaScriptを使用し、簡単なタスクを作成、実行します。
-[[AntのScriptタスクでJavaScriptを使用する>Ant/NewProperty]]
** AntのScriptタスク中でif文を使った条件分岐を行う [#Script]
`Condition`タスクの条件が複雑になるようなら、`<script language="javascript">`タスクなどで`if`文を使う方法もあります。

***AntのJarタスクで実行可能なJarファイルの作成 [#q763cefc]
Antを使って、Windows環境などでダブルクリックすると起動するJarファイルを作成します。
-[[AntのJarタスクで実行可能なJarファイルの作成>Ant/JarPackage]]
- [[AntのScriptタスク中でif文を使った条件分岐を行う>Ant/Script]]

***AntでOutOfMemoryErrorが発生する場合 [#yee90b60]
Antを実行するとOutOfMemoryErrorが発生する場合の処置方法について解説しています。
-[[AntでOutOfMemoryErrorが発生する場合>Ant/OutOfMemoryError]]
** AntのTaskを自作 [#Task]
`Ant`の`Task`を自作し、これを利用する方法をテストします。

***AntのプロパティファイルをXMLにする [#fb0bd314]
プロパティファイルのエンコーディングなどを気にせずに使えるように、AntのプロパティファイルをXMLにしてみます。
-[[AntのプロパティファイルをXMLにする>Ant/Properties]]
- [[AntのTaskを自作>Ant/Task]]

***Antで子フォルダのbuild.xmlを全部実行 [#cca68c8e]
Subantタスクを使って、一度に全部同じターゲットで子フォルダのbuild.xmlを実行します。
-[[Antで子フォルダのbuild.xmlを全部実行>Ant/Subant]]
** AntのScriptタスクでJavaScriptを使用する [#NewProperty]
`Ant`の`Script`タスクで`JavaScript`を使用し、簡単なタスクを作成、実行します。

***AntでFindBugsを実行する [#eeb19868]
AntからFindBugsを実行します。
-[[AntでFindBugsを実行する>Ant/FindBugs]]
- [[AntのScriptタスクでJavaScriptを使用する>Ant/NewProperty]]

**インストールと環境変数の設定 [#v1ec3010]
[http://ant.apache.org/ Apache Ant - Welcome]などからダウンロードしたアーカイブを展開して、そこを環境変数"ANT_HOME"に設定します。「システムのプロパティ→詳細設定→環境変数」で、"ANT_HOME"を新規作成、もしくは編集してください。
** AntのJarタスクで実行可能なJarファイルの作成 [#JarPackage]
`Ant`を使って、`Windows`環境などでダブルクリックすると起動する`Jar`ファイルを作成します。

#ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQsClLJ428I/AAAAAAAAAs0/B0-VGelgHu4/s800/ant_home.png)
- [[AntのJarタスクで実行可能なJarファイルの作成>Ant/JarPackage]]

また、''%ANT_HOME%\bin\ant.bat''を使うために、パスを通しておきます。「システムのプロパティ→詳細設定→環境変数」で、"Path"を編集してください。
** AntでOutOfMemoryErrorが発生する場合 [#OutOfMemoryError]
`Ant`を実行すると`OutOfMemoryError`が発生する場合の処置方法について解説しています。

#ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQsClNPEp4I/AAAAAAAAAs8/hdtpb5o_pG4/s800/ant_path.png)
- [[AntでOutOfMemoryErrorが発生する場合>Ant/OutOfMemoryError]]

**buildfileオプション [#e6cb38d3]
''build.xml''ファイルを作ってコマンドプロンプトから''ant.bat''を実行します。引数が無い場合、カレントフォルダにある''build.xml''が使用されます。
** AntのプロパティファイルをXMLにする [#Properties]
プロパティファイルのエンコーディングなどを気にせずに使えるように、`Ant`のプロパティファイルを`XML`にしてみます。

- [[AntのプロパティファイルをXMLにする>Ant/Properties]]

** Antで子フォルダのbuild.xmlを全部実行 [#Subant]
`Subant`タスクを使って、一度に全部同じターゲットで子フォルダの`build.xml`を実行します。

- [[Antで子フォルダのbuild.xmlを全部実行>Ant/Subant]]

** Antのbasedirを子フォルダに変更して全部実行 [#basedir]
`basedir`をカレントディレクトリ(`${user.dir}`)とは別の場所に指定して、`ant.bat`を実行します。

- [[Antのbasedirを子フォルダに変更して全部実行>Ant/basedir]]

** AntでFindBugsを実行する [#FindBugs]
`Ant`から`FindBugs`を実行します。

- [[AntでFindBugsを実行する>Ant/FindBugs]]

** AntでPMDを実行する [#PMD]
`Ant`から`PMD`を実行します。

- [[AntでPMDを実行する>Ant/PMD]]

** AntでCheckstyleを実行する [#Checkstyle]
`Ant`から`Checkstyle`を実行します。

- [[AntでCheckstyleを実行する>Ant/Checkstyle]]

** AntでのコンパイルにErrorProneを使用する [#ErrorProne]
`Ant`でのコンパイルに`ErrorProne`を使用して、コードチェックを強化します。

- [[AntでError Proneを使用する>Ant/ErrorProne]]

** Antタスクの定義をスクリプト言語を使用して行う [#Scriptdef]
スクリプト言語(`Javascript`)を使用して、`FTPS`(`File Transfer Protocol over SSL/TLS`)で通信する`Ant`タスクを定義します。

- [[Antタスクの定義をスクリプト言語を使用して行う>Ant/Scriptdef]]

* targetのサンプル [#target]
** Scpタスク [#scp]
#code{{
  <path id="jsch.path">
    <property name="scp.userid" value="${env.SCP_USERID}" />
    <property name="scp.server" value="${env.SCP_SERVER}" />
    <property name="scp.remotedir" value="${env.SCP_BASEDIR}" />
    <pathelement location="${ant.home}/lib/ant-jsch.jar" />
    <!-- http://www.jcraft.com/jsch/ からダウンロードして${ant.home}/lib/以下にコピー -->
    <pathelement location="${ant.home}/lib/jsch-0.1.53.jar" />
  </path>
  <target name="scp">
    <taskdef name="scp" classname="org.apache.tools.ant.taskdefs.optional.ssh.Scp"
                     classpathref="jsch.path" />
    <!-- scp.userなどは、環境変数またはant scp -Dscp.user=fooなどで指定 -->
    <scp todir="${scp.user}@${scp.server}:${scp.remotedir}"
       keyfile="${user.home}/.ssh/id_rsa" trust="yes">
      <fileset refid="scp.upload.fileset" />
    </scp>
  </target>
}}

* その他 [#others]
** Java 9 マイグレーション [#java9]
- `javac`タスク
-- `error: package com.sun.java.swing.plaf.windows is not visible`などとエラーになる場合は、コンパイル引数に`--add-exports=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED`を追加
-- `error: package javax.activation is not visible`の場合は、コンパイル引数に`--add-modules=java.activation`を追加
#code{{
<target name="compile" depends="prepare-src, prepare-resource, prepare-web">
  <javac srcdir="${build.src}"
         includes="**/*.java"
         destdir="${build.dest}"
         encoding="${compile.encoding}"
         debug="${compile.debug}"
         optimize="${compile.optimize}"
         deprecation="${compile.deprecation}"
         includeAntRuntime="no"
         fork="true"
         classpathref="project.class.path">
    <compilerarg value="-J-Dfile.encoding=${compile.encoding}" />
    <compilerarg value="-J-Duser.language=${user.language}" />
    <compilerarg value="--add-exports=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED" />
    <compilerarg value="--add-modules=java.activation" />
    <compilerarg value="-Xlint:unchecked" />
  </javac>
</target>
}}

- `java`タスク
-- `Exception in thread "AWT-EventQueue-0" java.lang.IllegalAccessError: superclass access check failed: class example.WindowsClippedTitleTabbedPaneUI (in unnamed module @0x396038de) cannot access class com.sun.java.swing.plaf.windows.WindowsTabbedPaneUI (in module java.desktop) because module java.desktop does not export com.sun.java.swing.plaf.windows to unnamed module @0x396038de`のようなエラーになる場合は`--add-opens=module/package=ALL-UNNAMED`などを`JVM`引数に追加
-- `Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: javax/activation/ActivationDataFlavor`などのエラーがでる場合は、`--add-modules=java.activation`などを`JVM`引数に追加
#code{{
<target name="run" depends="compile">
  <java classname="${main.class}" classpathref="project.class.path" fork="true">
    <jvmarg value="--add-opens=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED" />
    <jvmarg value="--add-modules=java.activation" />
  </java>
</target>
}}

** `buildfile`オプション [#buildfile]
`build.xml`ファイルを作ってコマンドプロンプトから`ant.bat`を実行します。引数が無い場合、カレントフォルダにある`build.xml`が使用されます。
 ant

任意の''build.xml''を使いたいときは、以下のようなオプションを使って指定します。
任意の`build.xml`を使いたいときは、以下のようなオプションを使って指定します。
 ant -buildfile "c:\hoge project\hoge_build.xml"
 ant -f "c:\hoge project\hoge_build.xml"

[[xyzzy]]などから、''ant.bat''をサブプロセス(C-x &)として実行する場合は、-emacsオプションをつけてやります。このオプションをつけると、xyzzyのバッファに表示されたエラー上で"F10"キー((標準のキーバインドでは、"F11"キーを押すと次のエラーへ移動します))を押すだけで、そのエラーの出たファイルの該当する行に、自動的にジャンプすることができます。
[[xyzzy]]などから、`ant.bat`をサブプロセス(KBD{C-x &})として実行する場合は、`-emacs`オプションを追加します。このオプションをつけると、[[xyzzy]]のバッファに表示されたエラー上でKBD{F10}キー(標準のキーバインドでは、KBD{F11}キーを押すと次のエラーへ移動)を押すだけで、そのエラーの出たファイルの該当する行に、自動的にジャンプすることができます。
 ant -emacs -buildfile "c:\hoge\build.xml"
 ant -e -f "c:\hoge\build.xml"

**build.xmlの勉強方法 [#v251ad1c]
ネットを検索すれば、いろんな''build.xml''が見つかるので、まずはその中からサンプルを選び、[http://ant.apache.org/manual/index.html マニュアル]([http://www.jajakarta.org/ant/ant-1.6.1/docs/ja/manual/index.html 日本語訳])を見ながら修正すると、手っ取り早く作成することができます。
** `build.xml`ファイル [#buildxml]
- `build.xml`と`build.properties`のサンプル
-- https://ateraimemo.com/data/ant/build.zip
-- この`build.zip`ファイルには、ソースコードのほかに、`build.xml`と`build.properties`を添付しています。`build.properties`は、環境依存しそうな記述を`build.xml`から抜き出したプロパティファイルです。[http://www.jdom.org/ JDOM]などから拾ってきた記述を追加、編集したりして作成しています。実際に使用する場合は、`build.properties`ファイルを環境に合わせて編集してください。そのまま使用する場合は、`build.xml`を展開し、`src/java`フォルダ以下にソースコード(`Shift_JIS`)を置いてください。

- build.xmlとbuild.propertiesのサンプル
-- http://terai.xrea.jp/data/ant/build.zip
-- この''build.zip''ファイルには、ソースコードのほかに、''build.xml''と''build.properties''を添付しています。''build.properties''は、環境依存しそうな記述を''build.xml''から抜き出したプロパティファイルです。[http://www.jdom.org/ JDOM]などから拾ってきた記述を追加、編集したりして作成しています。実際に使用する場合は、''build.properties''ファイルを環境に合わせて編集してください。そのまま使用する場合は、''build.xml''を展開し、src\javaフォルダ以下にソースコード(Shift_JIS)を置いてください。
- [[Java Swing Tips>Swing]]以下のサンプル
-- https://ateraimemo.com/swing/toolbarlayout/src.zip
-- このサイトの[[Java Swing Tips>Swing]]のサンプルに添付されている`build.xml`はすべて同一です。こちらは、「`build.xml`と`build.properties`のサンプル」とは違い、ソースコードは`UTF-8`で、`build.properties`ではなく、`xml`ファイル(`properties.xml`)をプロパティファイルとして使用しています。

-[[Java Swing Tips>Swing]]以下のサンプル
-- http://terai.xrea.jp/swing/toolbarlayout/src.zip
-- このサイトの[[Java Swing Tips>Swing]]のサンプルに添付されているbuild.xmlはすべて同一です。こちらは、「build.xmlとbuild.propertiesのサンプル」とは違い、ソースコードはUTF-8で、''build.properties''ではなく、xmlファイル(''properties.xml'')をプロパティファイルとして使用しています。
* 参考リンク [#reference]
- [https://ant.apache.org/ Apache Ant]
- [https://ant.apache.org/manual/index.html Apache Ant Manual]

**参考リンク [#v9b28311]
-[http://ant.apache.org/ Apache Ant]
-[http://www.ingrid.org/jajakarta/ant/ The Ja-Jakarta Project サブプロジェクト Ant翻訳]
-[http://ant.apache.org/manual/index.html Apache Ant Manual]
-[http://amateras.sourceforge.jp/cgi-bin/fswiki/wiki.cgi/free?page=xyzzy xyzzy Antモード]

*コメント [#i47478e7]
* コメント [#comment]
#comment
#comment