Ant

編集者:Terai Atsuhiro~

作成日:2003-09-25
更新日:2022-09-30 (金) 20:13:52

概要

Antは、Javaベースのビルドツールです。理論的には、makeの欠点がないmakeの一種です(Ant翻訳より引用)。

概要(Antとは)

Antは、Javaベースのビルドツールです。理論的には、makeの欠点がないmakeの一種です(Ant翻訳より引用)。 このページでは、JavaベースのビルドツールであるAntの使い方についてメモしています。 このページでは、JavaベースのビルドツールであるAntの使い方についてメモしています。

インストールと環境変数の設定

Apache Ant - Welcomeなどからダウンロードしたアーカイブを展開して、そこを環境変数ANT_HOMEに設定します。「システムのプロパティ→詳細設定→環境変数」で、ANT_HOMEを新規作成、もしくは編集してください。

build.xml、タスクなどのサンプル

build.xml、タスクなどのサンプルや、その他のちょっとしたTipsなどを、以下別ページにまとめています。
ant_home.png

AntのConditionタスクで条件分岐

Conditionタスクを使って、例えばディレクトリの有無などによる条件で、Targetタスクを実行するかどうかを振り分けます。
  • AntのConditionタスクで条件分岐 また、%ANT_HOME%\bin\ant.batを使うために、パスを通しておきます。「システムのプロパティ→詳細設定→環境変数」で、Pathを編集してください。

AntのJarタスクで実行可能なJarファイルの作成

Antを使って、Windows環境などでダブルクリックすると起動するJarファイルを作成します。

AntのTaskを自作

AntのTaskを自作し、これを利用する方法をテストします。

タスクのサンプル

build.xml、タスクなどのサンプルや、その他のちょっとしたTipsなどを、以下別ページにまとめています。

AntのConditionタスクで条件分岐を行う

Conditionタスクを使って、例えばディレクトリの有無などによる条件で、Targetタスクを実行するかどうかを振り分けます。

AntでOutOfMemoryErrorが発生する場合

Antを実行するとOutOfMemoryErrorが発生する場合の処置方法について解説しています。

AntのプロパティファイルをXMLにする

プロパティファイルのエンコーディングなどを気にせずに使えるように、AntのプロパティファイルをXMLにしてみます。

AntのScriptタスク中でif文を使った条件分岐を行う

Conditionタスクの条件が複雑になるようなら、<script language="javascript">タスクなどでif文を使う方法もあります。

Antで子フォルダのbuild.xmlを全部実行

Subantタスクを使って、一度に全部同じターゲットで子フォルダのbuild.xmlを実行します。
  • AntのScriptタスク中でif文を使った条件分岐を行う
  • インストールと環境変数の設定

    ダウンロードしたアーカイブを展開して、そこを環境変数"ANT_HOME"に設定します。「システムのプロパティ→詳細設定→環境変数」で、"ANT_HOME"を新規作成、もしくは編集してください。

    AntのTaskを自作

    AntTaskを自作し、これを利用する方法をテストします。 http://terai.xrea.jp/data/ant/ant_home.png また、%ANT_HOME%\bin\ant.batを使うために、パスを通しておきます。「システムのプロパティ→詳細設定→環境変数」で、"Path"を編集してください。

    AntのScriptタスクでJavaScriptを使用する

    AntScriptタスクでJavaScriptを使用し、簡単なタスクを作成、実行します。 http://terai.xrea.jp/data/ant/path.png

    AntのJarタスクで実行可能なJarファイルの作成

    Antを使って、Windows環境などでダブルクリックすると起動するJarファイルを作成します。

    buildfileオプション

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

    AntでOutOfMemoryErrorが発生する場合

    Antを実行するとOutOfMemoryErrorが発生する場合の処置方法について解説しています。

    AntのプロパティファイルをXMLにする

    プロパティファイルのエンコーディングなどを気にせずに使えるように、AntのプロパティファイルをXMLにしてみます。

    Antで子フォルダのbuild.xmlを全部実行

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

    Antのbasedirを子フォルダに変更して全部実行

    basedirをカレントディレクトリ(${user.dir})とは別の場所に指定して、ant.batを実行します。

    AntでFindBugsを実行する

    AntからFindBugsを実行します。

    AntでPMDを実行する

    AntからPMDを実行します。

    AntでCheckstyleを実行する

    AntからCheckstyleを実行します。

    AntでのコンパイルにErrorProneを使用する

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

    Antタスクの定義をスクリプト言語を使用して行う

    スクリプト言語(Javascript)を使用して、FTPS(File Transfer Protocol over SSL/TLS)で通信するAntタスクを定義します。

    targetのサンプル

    Scpタスク

    #spanend
      <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>
    #spanadd
    

    その他

    Java 9 マイグレーション

    • 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を追加
        #spanend
        #spanadd
        <target name="compile" depends="prepare-src, prepare-resource, prepare-web">
        #spanend
          <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>
        #spanadd
        </target>
        #spanend
        #spanadd
        
    • 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引数に追加
        #spanend
        #spanadd
        <target name="run" depends="compile">
        #spanend
          <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>
        #spanadd
        </target>
        #spanend
        #spanadd
        

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

    build.xmlの勉強方法

    ネットを検索すれば、いろんなbuild.xmlが見つかるので、まずはその中からサンプルを選び、マニュアル(日本語訳)を見ながら修正すると、手っ取り早く作成することができます。

    build.xmlファイル

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

    参考リンク

    参考リンク

    コメント

    コメント