Ant
Total: 49799
, Today: 2
, Yesterday: 7
Posted by aterai at
Last-modified:
- 概要
- インストールと環境変数の設定
- タスクのサンプル
- AntのConditionタスクで条件分岐を行う
- AntのScriptタスク中でif文を使った条件分岐を行う
- AntのTaskを自作
- AntのScriptタスクでJavaScriptを使用する
- AntのJarタスクで実行可能なJarファイルの作成
- AntでOutOfMemoryErrorが発生する場合
- AntのプロパティファイルをXMLにする
- Antで子フォルダのbuild.xmlを全部実行
- Antのbasedirを子フォルダに変更して全部実行
- AntでFindBugsを実行する
- AntでPMDを実行する
- AntでCheckstyleを実行する
- AntでのコンパイルにErrorProneを使用する
- Antタスクの定義をスクリプト言語を使用して行う
- targetのサンプル
- その他
- 参考リンク
- コメント
概要
Ant
は、Java
ベースのビルドツールです。理論的には、make
の欠点がないmake
の一種です(Ant
翻訳より引用)。
このページでは、Java
ベースのビルドツールであるAnt
の使い方についてメモしています。
インストールと環境変数の設定
Apache Ant - Welcomeなどからダウンロードしたアーカイブを展開して、そこを環境変数ANT_HOME
に設定します。「システムのプロパティ→詳細設定→環境変数」で、ANT_HOME
を新規作成、もしくは編集してください。
また、%ANT_HOME%\bin\ant.bat
を使うために、パスを通しておきます。「システムのプロパティ→詳細設定→環境変数」で、Path
を編集してください。
タスクのサンプル
build.xml
、タスクなどのサンプルや、その他のちょっとしたTips
などを、以下別ページにまとめています。
AntのConditionタスクで条件分岐を行う
Condition
タスクを使って、例えばディレクトリの有無などによる条件で、Target
タスクを実行するかどうかを振り分けます。
AntのScriptタスク中でif文を使った条件分岐を行う
Condition
タスクの条件が複雑になるようなら、<script language="javascript">
タスクなどでif
文を使う方法もあります。
AntのTaskを自作
Ant
のTask
を自作し、これを利用する方法をテストします。
AntのScriptタスクでJavaScriptを使用する
Ant
のScript
タスクでJavaScript
を使用し、簡単なタスクを作成、実行します。
AntのJarタスクで実行可能なJarファイルの作成
Ant
を使って、Windows
環境などでダブルクリックすると起動するJar
ファイルを作成します。
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タスク
<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>
その他
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
を追加<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
引数に追加<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
オプション
build.xml
ファイルを作ってコマンドプロンプトからant.bat
を実行します。引数が無い場合、カレントフォルダにあるbuild.xml
が使用されます。
ant
任意の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キーを押すと次のエラーへ移動)を押すだけで、そのエラーの出たファイルの該当する行に、自動的にジャンプすることができます。
ant -emacs -buildfile "c:\hoge\build.xml" ant -e -f "c:\hoge\build.xml"
build.xml
ファイル
build.xml
とbuild.properties
のサンプル- https://ateraimemo.com/data/ant/build.zip
- この
build.zip
ファイルには、ソースコードのほかに、build.xml
とbuild.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.xml
とbuild.properties
のサンプル」とは違い、ソースコードはUTF-8
で、build.properties
ではなく、xml
ファイル(properties.xml
)をプロパティファイルとして使用しています。