Ant のバックアップ(No.35)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Ant へ行く。
- 1 (2007-08-16 (木) 17:16:53)
- 2 (2007-11-30 (金) 14:02:54)
- 3 (2008-07-29 (火) 00:59:01)
- 4 (2008-09-14 (日) 17:44:32)
- 5 (2009-11-04 (水) 18:56:04)
- 6 (2010-11-20 (土) 15:01:26)
- 7 (2010-12-17 (金) 15:28:14)
- 8 (2010-12-19 (日) 18:55:11)
- 9 (2011-01-14 (金) 17:12:45)
- 10 (2011-01-18 (火) 22:49:08)
- 11 (2011-01-21 (金) 14:33:56)
- 12 (2011-02-15 (火) 19:56:36)
- 13 (2011-06-03 (金) 13:29:57)
- 14 (2012-01-19 (木) 18:52:53)
- 15 (2012-01-25 (水) 00:15:51)
- 16 (2012-03-06 (火) 14:30:03)
- 17 (2012-07-20 (金) 16:22:52)
- 18 (2014-02-18 (火) 19:13:59)
- 19 (2014-02-19 (水) 02:27:17)
- 20 (2014-09-02 (火) 15:44:27)
- 21 (2014-09-27 (土) 01:45:29)
- 22 (2014-11-08 (土) 01:39:55)
- 23 (2016-03-07 (月) 15:53:03)
- 24 (2016-06-15 (水) 16:57:49)
- 25 (2016-12-06 (火) 15:15:24)
- 26 (2017-01-23 (月) 19:59:27)
- 27 (2017-02-15 (水) 14:01:28)
- 28 (2017-03-24 (金) 12:44:41)
- 29 (2017-09-11 (月) 14:24:11)
- 30 (2017-09-19 (火) 18:30:26)
- 31 (2017-09-23 (土) 14:05:31)
- 32 (2017-10-19 (木) 16:07:45)
- 33 (2017-10-27 (金) 16:26:13)
- 34 (2017-10-31 (火) 20:52:57)
- 35 (2017-11-01 (水) 17:14:55)
- 36 (2017-11-16 (木) 18:13:36)
- 37 (2018-01-16 (火) 19:45:36)
- 38 (2018-10-27 (土) 20:59:14)
- 39 (2019-10-02 (水) 19:45:28)
- 40 (2022-09-30 (金) 20:13:52)
- keywords: [Ant] description: JavaベースのビルドツールであるAntの使い方についてメモしています。 author: aterai pubdate: 2003-09-25
概要
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タスクの定義をスクリプト言語を使用して行う
スクリプト言語(Javascript
)を使用して、FTPS
(File Transfer Protocol over SSL/TLS
)で通信するAnt
タスクを定義します。
targetのサンプル
Checkstyleタスク
<condition property="have.checkstyle">
<available file="${env.CHECKSTYLE_JAR}" />
</condition>
<target name="checkstyle" if="have.checkstyle">
<taskdef resource="com/puppycrawl/tools/checkstyle/ant/checkstyle-ant-task.properties"
classpath="${env.CHECKSTYLE_JAR}" />
<mkdir dir="${build.reports}" />
<checkstyle config="${user.dir}/checks.xml" failOnViolation="false">
<formatter type="plain" />
<formatter type="xml" toFile="${build.reports}/checkstyle-result.xml" />
<fileset dir="${src.dir}">
<exclude name="**/module-info.java" />
<include name="**/*.java" />
</fileset>
</checkstyle>
</target>
module-info.java
8.4
ではJava 9
のmodule-info.java
に未対応なので、<exclude name="**/module-info.java" />
などで回避C:\temp\jst\all.xml:47: Unable to process files: [C:\...\src\java\module-info.java]
Unable to create Root Module
Checkstyle
のバージョン更新に伴うモジュールの廃止などの変更で、config
ファイル(上記の例では${user.dir}/checks.xml
)が不正になった場合などに発生するようです。
8.2
remove FileContentsHolder module as FileContents object is available for filters on TreeWalker in TreeWalkerAudit Event . Author: Timur, Roman Ivanov #3573
<module name="FileContentsHolder" />
を削除する必要があるLeftCurlyCheck: clarify behavior of 'nlow' option after removal of 'maxLineLength'. Author: Roman Ivanov #3855
<property name="maxLineLength" value="100"/>
を削除する必要がある<module name="LeftCurly"> <property name="maxLineLength" value="100"/> </module>
8.1
Make SuppressionCommentFilter and SuppressWithNearbyCommentFilter children of TreeWalker. Author: Timur #4714
<module name="SuppressionCommentFilter" />
を<module name="TreeWalker">
の子要素になるよう移動削除する必要がある
ErrorProneタスク
<target name="errorprone" depends="prepare-src, prepare-resource, prepare-web">
<path id="errorprone.classpath">
<!-- 環境変数などでerror_prone_ant-x.x.x.jarのあるディレクトリを指定 -->
<fileset dir="${env.ERRORPRONE_HOME}">
<include name="*.jar" />
</fileset>
</path>
<componentdef name="errorprone" classname="com.google.errorprone.ErrorProneExternalCompilerAdapter"
classpathref="errorprone.classpath" />
<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">
<errorprone />
<compilerarg value="-Xlint:unchecked" />
<!-- MultipleTopLevelClassesのチェックを無視する例 -->
<compilerarg value="-Xep:MultipleTopLevelClasses:OFF" />
</javac>
</target>
- 上記の
componentdef
を使用する方法では、Java 9
でbootclasspath/p is no longer a supported option.
とエラーになる errorprone:[javac] Compiling 2 source files to C:\Users\terai\jst\SelectionKeeper\target\classes [javac] -Xbootclasspath/p is no longer a supported option. [javac] Error: Could not create the Java Virtual Machine. [javac] Error: A fatal exception has occurred. Program will exit.
- ドキュメントにあるように、
javac
タスクでcompiler="com.google.errorprone.ErrorProneAntCompilerAdapter"
属性を追加使用するよう修正
<target name="errorprone" 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"
compiler="com.google.errorprone.ErrorProneAntCompilerAdapter"
includeantruntime="false"
classpathref="project.class.path">
<compilerclasspath>
<fileset dir="${env.ERRORPRONE_HOME}" includes="*.jar" />
</compilerclasspath>
<compilerarg value="-Xlint:unchecked" />
<compilerarg value="-Xep:MultipleTopLevelClasses:OFF" />
</javac>
</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>
その他
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.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
)をプロパティファイルとして使用しています。