連載
» 2004年11月10日 10時00分 UPDATE

JavaTips 〜Apache/Jakarta編:Antの活用(ファイル操作)

[青木淳夫, 佐藤治夫,@IT]

 Antは「Antでアプリケーションのデプロイ作業を効率化する」にて紹介したようにJavaベースのビルドツールです。本TIPSでは、より高度なデプロイや配布を行うために必要なディレクトリやファイルに関するタスクを紹介します。

操作手順

(1)自動化する作業について

 今回のサンプルでは、StrutsベースのEJBを使わないシンプルなWebアプリケーションを想定し下記のフォルダ構成で、

  1. Webアプリケーション用のディレクトリ(sampleapp)の中身を全削除
  2. Webアプリケーション用のディレクトリ階層を作成
  3. 開発用のソースコードをコンパイル
  4. 各種ファイルをWebアプリケーション用のディレクトリ階層へコピー

という一連の手順を、delete、mkdir、copyのタスクを使用して自動化する例を紹介します。

project_root
└src
  └config
    └web.xml
    └struts-config.xml
    └ApplicationResources.properties
    └log4j.properties
  └java
  └jsp
  └tld
└lib


 サンプルのAntを実行することによって、下記のWebアプリケーション用の環境が構築されます。

poject_root
└sampleapp
  └WEB-INF
      └*.tldと*.xml
    └classes
      └*.classと*.properties
    └jsp
      └*.jsp
    └lib
      └*.jar


(2)ファイルを設定する(build.xml)

 以下は、先ほど示した手順をAntで実行するためのファイルの設定です。

build.xml
<?xml version="1.0" encoding="Shift_JIS"?>
<project name="project" default="build" basedir=".">

<!-- ソース管理用ディレクトリ(CVS管理) -->
<property name="lib.dir" value="lib"/>
<property name="src.dir" value="src"/>

<!-- Web用動的生成ディレクトリ -->

<property name="web-app.name" value="sampleapp"/>
<property name="web-inf.dir" value="${web-app.name}/WEB-INF"/>
<property name="web-app.class.dir" value="${web-inf.dir}/classes"/>
<property name="web-app.lib.dir" value="${web-inf.dir}/lib"/>
<property name="web-app.jsp.dir" value="${web-inf.dir}/jsp"/>

<!-- all ターゲット -->
<target name="all" depends="clean,build"/>

<!-- build ターゲット -->
<target name="build" depends="compile,copyfiles"/>

<!-- (1)clean ターゲット -->
<target name="clean">
<delete dir="${web-app.name}" />
</target>

<!-- (2)prepare ターゲット -->
<target name="prepare">
<!--指定されたディレクトリを作成-->
<mkdir dir="${web-inf.dir}"/>
<mkdir dir="${web-app.class.dir}"/>
<mkdir dir="${web-app.lib.dir}"/>
<mkdir dir="${web-app.jsp.dir}"/>
</target>

<!-- (3)compileターゲット -->
<target name="compile" depends="prepare">
<!--srcdir属性で指定されたディレクトリ内のファイルをコンパイル。
コンパイル結果は、destdir属性で指定されたディレクトリへ-->
<javac srcdir="${src.dir}/java" 
destdir="${web-app.class.dir}" 
debug="on" />
</target>

<!-- (4)copyfiles ターゲット -->
<target name="copyfiles" depends="prepare">
<!-- 指定されたファイルをtodir属性で指定されたディレクトリへコピー -->
<!-- LIB -->
<copy todir="${web-app.lib.dir}">
<fileset dir="${lib.dir}"/>
</copy>
<!-- JSP -->
<copy todir="${web-app.jsp.dir}">
<fileset dir="${src.dir}/jsp"/>
</copy>
<!-- TLD -->
<copy todir="${web-inf.dir}">
<fileset dir="${src.dir}/tld"/>
</copy>
<!-- CONFIG -->
<!-- WEB-INFにコピーするXMLファイル -->

<copy todir="${web-inf.dir}">
<fileset dir="${src.dir}/config/" includes="**/*.xml"/>
</copy>
<!-- クラスパスのルートにコピーするプロパティファイル -->
<copy file="${src.dir}/config/ApplicationResources.properties.sjis"
todir="${web-app.class.dir}"/>
<copy file="${src.dir}/config/log4j.properties"
todir="${web-app.class.dir}"/>
</target>

</project>


 「ant all」にて実行した場合、下記のような結果が出力されます。

Buildfile: C:\AntPrj\build.xml
clean:
[delete] Deleting directory C:\AntPrj\sampleapp
・・・(中略)・・・
all:
BUILD SUCCESSFUL
Total time: 2 seconds


 cleanターゲットにて全ファイルの削除、prepareターゲットにてディレクトリ作成、compileターゲットにてコンパイル、copyfilesターゲットにて、Webアプリケーション用のディレクトリへ各種ファイルがコピーされたことが確認できます。

参考:cleanターゲットはclassファイルの削除を行います。つまりcleanターゲットを実行せずにbuildターゲットを実行した場合には差分ビルドとなり短時間で処理を完了させることができます。開発のコーディング時などはこちらの差分ビルドを使い、全部やり直したいときにのみcleanターゲットを含むallターゲットを実行するのが一般的です。

 Antの各タスクに関する詳細については、以下のサイトなどが参考になります。

「Ant詳説」

Profile

WINGSプロジェクト

青木淳夫・佐藤治夫


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。