Ant の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Ant へ行く。
- Ant の差分を削除
--- keywords: [Ant] description: JavaベースのビルドツールであるAntの使い方についてメモしています。 author: aterai pubdate: 2003-09-25 --- #contents * 概要 [#summary] `Ant`は、`Java`ベースのビルドツールです。理論的には、`make`の欠点がない`make`の一種です(`Ant`翻訳より引用)。 このページでは、`Java`ベースのビルドツールである`Ant`の使い方についてメモしています。 * インストールと環境変数の設定 [#environments] [https://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で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`を使いたいときは、以下のようなオプションを使って指定します。 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`と`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] - [https://ant.apache.org/ Apache Ant] - [https://ant.apache.org/manual/index.html Apache Ant Manual] * コメント [#comment] #comment #comment