Ant のバックアップ差分(No.36)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - 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
---
#contents
* 概要 [#summary]
`Ant`は、`Java`ベースのビルドツールです。理論的には、`make`の欠点がない`make`の一種です(`Ant`翻訳より引用)。
このページでは、`Java`ベースのビルドツールである`Ant`の使い方についてメモしています。
* インストールと環境変数の設定 [#environments]
[http://ant.apache.org/ Apache Ant - Welcome]などからダウンロードしたアーカイブを展開して、そこを環境変数`ANT_HOME`に設定します。「システムのプロパティ→詳細設定→環境変数」で、`ANT_HOME`を新規作成、もしくは編集してください。
#ref(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQsClLJ428I/AAAAAAAAAs0/B0-VGelgHu4/s800/ant_home.png)
また、`%ANT_HOME%\bin\ant.bat`を使うために、パスを通しておきます。「システムのプロパティ→詳細設定→環境変数」で、`Path`を編集してください。
#ref(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQsClNPEp4I/AAAAAAAAAs8/hdtpb5o_pG4/s800/ant_path.png)
* タスクのサンプル [#of688f72]
`build.xml`、タスクなどのサンプルや、その他のちょっとした`Tips`などを、以下別ページにまとめています。
** AntのConditionタスクで条件分岐を行う [#Condition]
`Condition`タスクを使って、例えばディレクトリの有無などによる条件で、`Target`タスクを実行するかどうかを振り分けます。
- [[AntのConditionタスクで条件分岐を行う>Ant/Condition]]
** AntのScriptタスク中でif文を使った条件分岐を行う [#Script]
`Condition`タスクの条件が複雑になるようなら、`<script language="javascript">`タスクなどで`if`文を使う方法もあります。
- [[AntのScriptタスク中でif文を使った条件分岐を行う>Ant/Script]]
** AntのTaskを自作 [#Task]
`Ant`の`Task`を自作し、これを利用する方法をテストします。
- [[AntのTaskを自作>Ant/Task]]
** AntのScriptタスクでJavaScriptを使用する [#NewProperty]
`Ant`の`Script`タスクで`JavaScript`を使用し、簡単なタスクを作成、実行します。
- [[AntのScriptタスクでJavaScriptを使用する>Ant/NewProperty]]
** AntのJarタスクで実行可能なJarファイルの作成 [#JarPackage]
`Ant`を使って、`Windows`環境などでダブルクリックすると起動する`Jar`ファイルを作成します。
- [[AntのJarタスクで実行可能なJarファイルの作成>Ant/JarPackage]]
** AntでOutOfMemoryErrorが発生する場合 [#OutOfMemoryError]
`Ant`を実行すると`OutOfMemoryError`が発生する場合の処置方法について解説しています。
- [[AntでOutOfMemoryErrorが発生する場合>Ant/OutOfMemoryError]]
** 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タスクの定義をスクリプト言語を使用して行う [#Scriptdef]
スクリプト言語(`Javascript`)を使用して、`FTPS`(`File Transfer Protocol over SSL/TLS`)で通信する`Ant`タスクを定義します。
- [[Antタスクの定義をスクリプト言語を使用して行う>Ant/Scriptdef]]
* targetのサンプル [#target]
** Checkstyleタスク [#Checkstyle]
#code{{
<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 [#vec7503a]
- `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 [#BuildFailed]
`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"/>`を削除する必要がある
#code{{
<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タスク [#ErrorProne]
- [http://errorprone.info/ Error Prone]
-- [http://errorprone.info/docs/flags Command-line flags]
#code{{
<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}"
excludes="**/module-info.java"
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"`属性を追加使用するよう修正
#code{{
<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タスク [#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]
** `buildfile`オプション [#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`をサブプロセス(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`ファイル [#buildxml]
ネットを検索すれば、いろんな`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`と`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`)を置いてください。
- [[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`)をプロパティファイルとして使用しています。
* 参考リンク [#reference]
- [http://ant.apache.org/ Apache 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モード]
* コメント [#comment]
#comment
#comment