AntのTIPS集 †可変ファイル名のファイルを、固定ファイル名のファイルとしてコピーする †日付がついて出力される可変ファイル名のjarファイルを、SNAPSHOTという固定ファイル名のjarにリネームしたい。 <copy tofile="target/hogehogelib-SNAPSHOT.jar"> <fileset dir='target' includes="hogehogelib-*.jar" excludes="hogehogelib-*sources.jar,hogehogelib-SNAPSHOT.jar,hogehogelib-SNAPSHOT-source.jar"/> </copy> target内にある hogehogelib-*.jar ていう名前のファイルを target/hogehogelib-SNAPSHOT.jar という名前にリネームしています。excludesは任意です。ココではさほど意味なし。 おなじファイルセットでDeleteすれば、リネーム完了。 AntをJavaコマンドから実行する †Antのカスタムクラスをブレークポイントなどを使ってDebugしたくて、EclipseのJavaアプリ実行で実行できる方法を探してましたが、見つかりました。
でいけますね。ブレークポイントが使えるのは非常に便利! http://www.ingrid.org/jajakarta/ant/ant-1.2/docs-ja/index.html プロパティを上書き †build.xmlには外からプロパティのValueを渡すことができます。たとえば $ ant -Dproject.name=newProjectname とすれば、build.xml内の${project.name}を「newProjectname」という値にすることができます。build.xml内でpropertiesファイルで値を設定したりしていても、引数で渡す値の方が優先されるようです。ようするにプロパティを引数で上書き可能ということですね。 AntでFTPタスクを使用したい †${ant_home}/lib/ に以下のライブラリを入れる必要があります。 ant 1.5 まではNetComponent.jar ant 1.6 からはcommons-net-1.2.2.jar 1.6.1を使ってるのにNetComponent?を配置して、うごかねーって思ってたら、必要ライブラリが変わったんですね。 で実際のタスクの書き方は、 <target name="cvs.ftp" depends="init"> <ftp server="[ホスト名]" remotedir="[サーバのディレクトリ]" userid="xxxx" password="xxxx" > <fileset dir="${report.root}"> <include name="changelog.html" /> </fileset> </ftp> </target> てな感じ。 日付処理(n日前の日付をプロパティにセットする、とか) †<tstamp> <format property="TODAY" pattern="yyyy/MM/dd" /> </tstamp> <!-- 7日前/10日後を定義する処理 --> <propertyfile file="date.properties"> <entry key = "TODAY-7" type = "date" value = "7" default = "${TODAY}" pattern = "yyyy/MM/dd" operation = "-" /> <entry key = "TODAY+10" type = "date" value = "10" default = "${TODAY}" pattern = "yyyy/MM/dd" operation = "+" /> </propertyfile> <property file="date.properties" /> <delete file="date.properties" /> もっとスマートなやり方がありました。 <tstamp> <format property="TODAY" pattern="yyyy/MM/dd"/> <!-- 7日前/10日後を定義する処理 --> <format property="TODAY-n" pattern="yyyy/MM/dd" offset="-${cvs.num}"/> <format property="TODAY+10" pattern="yyyy/MM/dd" offset="10"/> <format property="lastModified" pattern="yyyy/MM/dd HH:mm:ss"/> </tstamp> コンパイル †<target name="javac" depends="init"> <mkdir dir="${class.dir}" /> <javac srcdir="${src.dir}" destdir="${class.dir}" encoding="${compile.encoding}" memoryInitialSize="256M" fork="yes" memoryMaximumSize="256M"> <!-- usage : excludes="kino/hoge.org/**" --> <classpath refid="project.class.path" /> </javac> </target> ちなみにクラスパスなどは <path id="project.class.path"> <pathelement path="${java.class.path}" /> <pathelement path="${class.dir}" /> <pathelement path="${jar.dir}" /> <pathelement location="${log.jar}" /> <pathelement location="${swt.jar}" /> </path> とかすればよい。 ディレクトリ配下のすべてのjarにクラスパスを通す †<path id="all.classes"> <fileset dir="${jar.dir}"> <include name="**/*.jar"/> </fileset> </path> といった書き方をすると、 <!-- Javaテストプログラムの実行 --> <target name="java" depends="javac"> <java classname="kino.test.TestApp2" fork="yes" maxmemory="256M" > <arg line="hogehoge" /> <classpath refid="all.classes" /> </java> </target> と書くことができる。こうするとすべてのjarファイルにクラスパスを通したことになる。 javacタスクで、Ant自身が通したクラスパスを無効にする。 †題名の通り、デフォルトは有効なので(ようするにxercesImpl.jarなどは、${ANT_HOME}/lib/にあるため、クラスパスを通さなくてもコンパイルエラーにならない) それを無効にする方法。javacタスクのオプションで includeAntRuntime="no" とすればよい。 AntにVM引数を渡す †環境変数 ANT_OPTS を指定すればよいみたい。例えばJavaのメモリ使用量を設定するには export ANT_OPTS=-Xmx512m など。 タスクの一覧表示 †>ant -projecthelp とすると、プロジェクトの一覧が表示される。以下が結果 Buildfile: build.xml moneytest build file Main targets: Subtargets: clean clover.view code hist.report record.point report.html test with.clover Default target: code 外部タスクを使う †${ANT_HOME}/lib/ にjarファイルを置く必要がある。 独自タスクの定義 †基本的にはtaskdefタグで行う。下記がサンプル。 <taskdef name="java2html" classname="com.java2html.Java2HTMLTask"> <classpath> <pathelement location="${j2h.jar}" /> </classpath> 上でそのタスクが存在するjarを指定。 </taskdef> Java2html(旧バージョン) †${j2h.jar}は、j2h.jarを指定(ファイルはhttp://www.java2html.com/より取得)*1 <target name="j2h" depends="javac"> <mkdir dir="${j2h.dir}"/> <java classname="j2h" fork="yes" maxmemory="256M" > <arg line="-js ${src.dir} -d ${j2h.dir} -t 2 -m 4" /> <classpath> <pathelement location="${j2h.jar}" /> </classpath> </java> </target> ディレクトリをいったんとっといて上書きして、処理したら元に戻す †newDir -> oldDir へファイルをコピーして、なんか処理。 で、もとに戻すビルドファイル。一度、環境固有の設定情報に書きかえてビルドして、終わったら元通りにしたい、、なんて場合があったので。。 build.win.properties source.dir=./src/newDir dest.dir=./src/oldDir tmp.dir=./tmp build.xml <?xml version='1.0' encoding='UTF-8'?> <project name='project' default='backup'> <!-- backup -> copy -> .... build -> restore --> <property file="build.win.properties"/> <target name='backup'> <copy todir='${tmp.dir}' overwrite="true" preservelastmodified='true'> <fileset dir='${dest.dir}' defaultexcludes="no" /> </copy> </target> <target name='copy'> <copy todir='${dest.dir}' overwrite="true" preservelastmodified='true'> <fileset dir='${source.dir}' excludes="**/**.svn"/> </copy> </target> <target name='restore'> <delete dir="${dest.dir}"/> <copy todir='${dest.dir}' overwrite="true" preservelastmodified='true' > <fileset dir='${tmp.dir}' defaultexcludes="no" /> </copy> <delete dir="${tmp.dir}"/> </target> </project> この記事は 現在のアクセス:43735 |