Top / Java / Ant / TIPS集

AntのTIPS集

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>

この記事は

選択肢 投票
おもしろかった 13  
そうでもない 8  

Top / Java / Ant / TIPS集

現在のアクセス:43144


*1 Java2htmlは新しいバージョンができて、Ant用タスクが定義されたりと、上記内容は古いものとなっています。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS