Ant-quick-guide
Ant-はじめに
ANTはAnother Neat Toolの略です。 これは、ApacheのJavaベースのビルドツールです。 Apache Antの詳細に入る前に、まず最初にビルドツールが必要な理由を理解しましょう。
ビルドツールの必要性
開発者は、平均して、ビルドや展開などの日常的なタスクにかなりの時間を費やしています。
- コードをコンパイルする
- バイナリのパッケージ化
- バイナリをテストサーバーに展開する
- 変更をテストする
- ある場所から別の場所にコードをコピーする
上記の作業を自動化して単純化するために、Apache Antが役立ちます。 これは、コマンドラインから実行できるオペレーティングシステムの構築および展開ツールです。
Apache Antの歴史
- Antは、James Duncan Davidson(Tomcatのオリジナル著者)によって作成されました。
- 最初はTomcatのビルドに使用され、Tomcatディストリビューションの一部としてバンドルされていました。
- Antは、Apache Makeツールに関連する問題と複雑さから生まれました。
- Antは2000年にApacheで独立したプロジェクトとして昇進しました。 2014年5月現在のApache Antの最新バージョンは1.9.4です。
Apache Antの機能
- Antは、使用可能な最も完全なJavaビルドおよびデプロイメントツールです。
- Antはプラットフォームに依存せず、ファイルセパレーターなどのプラットフォーム固有のプロパティを処理できます。
- Antは、「touch」コマンドを使用してファイルの変更時刻を変更するなど、プラットフォーム固有のタスクを実行するために使用できます。
- Antスクリプトは、プレーンXMLを使用して記述されています。 すでにXMLに精通している場合は、Antを非常にすばやく学ぶことができます。
- Antは、複雑な反復タスクの自動化が得意です。
- Antには、事前定義されたタスクの大きなリストが付属しています。
- Antは、カスタムタスクを開発するためのインターフェースを提供します。
- Antはコマンドラインから簡単に呼び出すことができ、無料および商用のIDEと統合できます。
Ant-環境設定
Apache Ant Antは、オープンソースイニシアチブによって認定された本格的なオープンソースライセンスであるApacheソフトウェアライセンスの下で配布されます。
完全なソースコード、クラスファイル、およびドキュメントを含む最新のApache Antバージョンは、http://ant.apache.orgにあります。
Apache Antのインストール
Java Development Kit(JDK)が既にコンピューターにダウンロードおよびインストールされていることを前提としています。 そうでない場合は、/java/java_environment_setup [こちら]のリンクに従ってください。
- JAVA_HOME環境変数が、JDKがインストールされているフォルダーに設定されていることを確認してください。
- [[1]]
- zipファイルを便利な場所c:\ folderに解凍します。 Winzip、winRAR、7-zip、または同様のツールを使用します。
- Antインストールフォルダー(この場合は c:\ apache-ant-1.8.2-bin フォルダー)を指す ANT_HOME という新しい環境変数を作成します。
- Apache AntバッチファイルへのパスをPATH環境変数に追加します。 この場合、これは c:\ apache-ant-1.8.2-bin \ bin フォルダーになります。
Apache Antインストールの検証
コンピューターにApache Antが正常にインストールされたことを確認するには、コマンドプロンプトでantと入力します。
次のような出力が表示されるはずです-
C:\>ant -version
Apache Ant(TM) version 1.8.2 compiled on December 20 2010
上記の出力が表示されない場合は、インストール手順に従っていることを確認してください。
Eclipseのインストール
このチュートリアルでは、AntとEclipse IDEの統合についても説明します。 したがって、Eclipseをまだインストールしていない場合は、Eclipseをダウンロードしてインストールしてください
Eclipseをインストールするには-
- www.eclipse.orgから最新のEclipseバイナリをダウンロードします。
- Eclipseバイナリを便利な場所、たとえばc:\ folderに解凍します。
- c:\ eclipse \ eclipse.exeからEclipseを実行します
Ant-ビルドファイル
通常、 build.xml と呼ばれるAntのビルドファイルは、プロジェクトのベースディレクトリに配置する必要があります。 ただし、ファイル名またはその場所に制限はありません。 他のファイル名を自由に使用したり、ビルドファイルを他の場所に保存したりできます。
この演習では、コンピューターの任意の場所にbuild.xmlというファイルを作成し、次の内容を含めます-
<?xml version = "1.0"?>
<project name = "Hello World Project" default = "info">
<target name = "info">
<echo>Hello World - Welcome to Apache Ant!</echo>
</target>
</project>
xml宣言の前に空白行または空白がないように注意してください。 それらを許可すると、antビルドの実行中に次のエラーメッセージが表示されます-
「[xX] [mM] [lL]」に一致する処理命令ターゲットは許可されません。
すべてのビルドファイルには、 project 要素と少なくとも1つの target 要素が必要です。
XML要素*プロジェクト*には3つの属性があります-
Sr.No. | Attributes & Description |
---|---|
1 |
name プロジェクトの名前。 (オプション) |
2 |
default ビルドスクリプトのデフォルトターゲット。 プロジェクトには、任意の数のターゲットを含めることができます。 この属性は、デフォルトと見なされるターゲットを指定します。 (必須) |
3 |
basedir プロジェクトのベースディレクトリ(または)ルートフォルダー。 (オプション) |
ターゲットは、1つのユニットとして実行するタスクのコレクションです。 この例では、ユーザーに情報メッセージを提供する単純なターゲットがあります。
ターゲットは、他のターゲットに依存する場合があります。 たとえば、 deploy ターゲットは package ターゲットに依存する場合があり、 package ターゲットは compile ターゲットに依存する場合があります。 依存関係は、 depends 属性を使用して示されます。 たとえば-
<target name = "deploy" depends = "package">
....
</target>
<target name = "package" depends = "clean,compile">
....
</target>
<target name = "clean" >
....
</target>
<target name = "compile" >
....
</target>
ターゲット要素には次の属性があります-
Sr.No. | Attributes & Description |
---|---|
1 |
name ターゲットの名前(必須) |
2 |
depends このターゲットが依存するすべてのターゲットのコンマ区切りリスト。 (オプション) |
3 |
description ターゲットの短い説明。 (オプション) |
4 |
if 条件付き属性の真偽に基づいてターゲットを実行できます。 (オプション) |
5 |
unless 指定した拡張ポイントの依存関係リストにターゲットを追加します。 拡張ポイントはターゲットに似ていますが、タスクはありません。 (オプション) |
上記の例の echo タスクは、メッセージを出力する簡単なタスクです。 この例では、_Hello World_というメッセージを出力します。
antビルドファイルを実行するには、コマンドプロンプトを開き、build.xmlが存在するフォルダーに移動して、 ant info と入力します。 代わりに ant と入力することもできます。 ビルドファイルの info がデフォルトのターゲットであるため、両方が機能します。 次の出力が表示されるはずです-
C:\>ant
Buildfile: C:\build.xml
info: [echo] Hello World - Welcome to Apache Ant!
BUILD SUCCESSFUL
Total time: 0 seconds
C:\>
Ant-プロパティタスク
AntビルドファイルはXMLで記述されているため、お気に入りのプログラミング言語で行うように変数を宣言することはできません。 ただし、ご想像のとおり、プロジェクト名、プロジェクトソースディレクトリなどの変数の宣言がAntで許可されていると便利です。
Antは、プロパティを指定できる property 要素を使用します。 これにより、ビルドごとに、または環境ごとにプロパティを変更できます。
デフォルトでは、Antはビルドファイルで使用できる次の定義済みプロパティを提供します-
Sr.No. | Properties & Description |
---|---|
1 |
ant.file ビルドファイルの完全な場所。 |
2 |
ant.version Apache Antインストールのバージョン。 |
3 |
basedir
|
4 |
ant.java.version Antが使用するJDKのバージョン。 |
5 |
ant.project.name
|
6 |
ant.project.default-target 現在のプロジェクトのデフォルトのターゲット。 |
7 |
ant.project.invoked-targets 現在のプロジェクトで呼び出されたターゲットのコンマ区切りリスト。 |
8 |
ant.core.lib Ant jarファイルの完全な場所。 |
9 |
ant.home Antインストールのホームディレクトリ。 |
10 |
ant.library.dir Antライブラリファイルのホームディレクトリ-通常はANT_HOME/libフォルダー。 |
また、Antは、システムプロパティ(例:file.separator)をビルドファイルで使用できるようにします。
上記に加えて、ユーザーは property 要素を使用して追加のプロパティを定義できます。 次の例は、 sitename というプロパティを定義する方法を示しています-
<?xml version = "1.0"?>
<project name = "Hello World Project" default = "info">
<property name = "sitename" value = "www.finddevguides.com"/>
<target name = "info">
<echo>Apache Ant version is ${ant.version} - You are at ${sitename} </echo>
</target>
</project>
上記のビルドファイルでAntを実行すると、次の出力が生成されます-
C:\>ant
Buildfile: C:\build.xml
info: [echo] Apache Ant version is Apache Ant(TM) version 1.8.2
compiled on December 20 2010 - You are at www.finddevguides.com
BUILD SUCCESSFUL
Total time: 0 seconds
C:\>
Ant-プロパティファイル
いくつかのプロパティを操作している場合は、ビルドファイルでプロパティを直接設定しても構いません。 ただし、大規模なプロジェクトの場合、プロパティを別のプロパティファイルに保存することは理にかなっています。
プロパティを別のファイルに保存すると、次の利点があります-
- 実行環境ごとに異なるプロパティ設定を使用して、同じビルドファイルを再利用できます。 たとえば、ビルドプロパティファイルは、DEV、TEST、およびPROD環境に対して個別に維持できます。
- (特定の環境で)プロパティの値を事前に知らない場合に便利です。 これにより、プロパティ値がわかっている他の環境でビルドを実行できます。
厳密なルールはありませんが、通常、プロパティファイルの名前は build.properties で、 build.xml ファイルと一緒に配置されます。 build.properties.dev や* build.properties.test。*など、デプロイメント環境に基づいて複数のビルドプロパティファイルを作成できます。
ビルドプロパティファイルの内容は、通常のJavaプロパティファイルに似ています。 これらには1行に1つのプロパティが含まれます。 各プロパティは、名前と値のペアで表されます。 名前と値のペアは等号(=)で区切られます。 プロパティに適切なコメントを付けることを強くお勧めします。 コメントは、ハッシュ(#)文字を使用してリストされます。
次の例は、 build.xml ファイルとそれに関連する build.properties ファイルを示しています-
build.xml
<?xml version = "1.0"?>
<project name = "Hello World Project" default = "info">
<property file = "build.properties"/>
<target name = "info">
<echo>Apache Ant version is ${ant.version} - You are at ${sitename} </echo>
</target>
</project>
build.properties
# The Site Name
sitename = www.finddevguides.com
buildversion = 3.3.2
上記の例では、 sitename はWebサイト名にマッピングされるカスタムプロパティです。 この方法で、任意の数のカスタムプロパティを宣言できます。 上記の例にリストされている別のカスタムプロパティは buildversion であり、このインスタンスではビルドのバージョンを指します。
上記に加えて、Antには多くの定義済みビルドプロパティが付属しています。これらのプロパティは前のセクションにリストされていますが、以下にもう一度示します。
Sr.No. | Properties & Description |
---|---|
1 |
ant.file ビルドファイルの完全な場所。 |
2 |
ant.version Apache Antインストールのバージョン。 |
3 |
basedir
|
4 |
ant.java.version Antが使用するJDKのバージョン。 |
5 |
ant.project.name
|
6 |
ant.project.default-target 現在のプロジェクトのデフォルトのターゲット。 |
7 |
ant.project.invoked-targets 現在のプロジェクトで呼び出されたターゲットのコンマ区切りリスト。 |
8 |
ant.core.lib Ant jarファイルの完全な場所。 |
9 |
ant.home Antインストールのホームディレクトリ。 |
10 |
ant.library.dir Antライブラリファイルのホームディレクトリ-通常はANT_HOME/libフォルダー。 |
この章で紹介する例では、 ant.version 組み込みプロパティを使用しています。
Ant-データ型
Antは、多数の事前定義されたデータ型を提供します。 「データ型」という用語をプログラミング言語で使用可能なものと混同しないでください。代わりに、それらをすでに製品に組み込まれている一連のサービスと見なしてください。
次のデータ型は、Apache Antによって提供されます。
ファイルセット
ファイルセットのデータ型は、ファイルのコレクションを表します。 特定のパターンに一致するファイルを含めるまたは除外するフィルターとして使用されます。
たとえば、次のコードを参照してください。 ここで、src属性はプロジェクトのソースフォルダーを指します。
ファイルセットは、「Stub」という単語を含むものを除き、ソースフォルダ内のすべての.javaファイルを選択します。 大文字と小文字を区別するフィルターはファイルセットに適用されます。つまり、Samplestub.javaという名前のファイルはファイルセットから除外されません。
<fileset dir = "${src}" casesensitive = "yes">
<include name = "**/*.java"/>
<exclude name = "**/*Stub*"/>
</fileset>
パターンセット
パターンセットは、特定のパターンに基づいてファイルまたはフォルダーを簡単にフィルター処理できるパターンです。 パターンは、次のメタ文字を使用して作成することができます-
- ?-1文字のみに一致します。
- *-ゼロまたは多くの文字に一致します。
- **-ゼロまたは多数のディレクトリに再帰的に一致します。
次の例は、パターンセットの使用法を示しています。
<patternset id = "java.files.without.stubs">
<include name = "src/**/*.java"/>
<exclude name = "src/**/*Stub*"/>
</patternset>
パターンセットは、次のようにファイルセットで再利用することができます-
<fileset dir = "${src}" casesensitive = "yes">
<patternset refid = "java.files.without.stubs"/>
</fileset>
ファイルリスト
ファイルリストのデータ型は、次の違いを除いてファイルセットに似ています-
- filelistには明示的に名前が付けられたファイルのリストが含まれており、ワイルドカードはサポートされていません。
- filelistデータ型は、既存のファイルまたは存在しないファイルに適用できます。
filelistデータ型の次の例を見てみましょう。 ここで、属性 webapp.src.folder は、プロジェクトのWebアプリケーションソースフォルダーを指します。
<filelist id = "config.files" dir = "${webapp.src.folder}">
<file name = "applicationConfig.xml"/>
<file name = "faces-config.xml"/>
<file name = "web.xml"/>
<file name = "portlet.xml"/>
</filelist>
フィルターセット
コピータスクと共にフィルターセットデータ型を使用すると、パターンに一致するすべてのファイルの特定のテキストを置換値に置き換えることができます。
一般的な例は、次のコードに示すように、リリースノートファイルにバージョン番号を追加することです。
<copy todir = "${output.dir}">
<fileset dir = "${releasenotes.dir}" includes = "**/*.txt"/>
<filterset>
<filter token = "VERSION" value = "${current.version}"/>
</filterset>
</copy>
このコードでは-
- 属性 output.dir は、プロジェクトの出力フォルダーを指します。
- 属性 releasenotes.dir は、プロジェクトのリリースノートフォルダーを指します。
- 属性 current.version は、プロジェクトの現在のバージョンフォルダーを指します。
- 名前が示すとおり、コピータスクは、ある場所から別の場所にファイルをコピーするために使用されます。
Path
*path* データ型は、一般的にクラスパスを表すために使用されます。 パス内のエントリは、セミコロンまたはコロンを使用して区切られます。 ただし、これらの文字は、実行時に実行システムのパス区切り文字に置き換えられます。
クラスパスは、以下の例に示すように、プロジェクト内のjarファイルとクラスのリストに設定されます。
<path id = "build.classpath.jar">
<pathelement path = "${env.J2EE_HOME}/${j2ee.jar}"/>
<fileset dir = "lib">
<include name = "**/*.jar"/>
</fileset>
</path>
このコードでは-
- 属性 env.J2EE_HOME は、環境変数 J2EE_HOME を指します。
- 属性 j2ee.jar は、J2EEベースフォルダー内のJ2EE jarファイルの名前を指します。
Ant-プロジェクトの構築
Antのデータ型について学習したので、今度はその知識を実行に移します。 この章ではプロジェクトをビルドします。 この章の目的は、javaクラスをコンパイルしてWEB-INF \ classesフォルダーに配置するAntファイルを構築することです。
次のプロジェクト構造を考慮してください-
- データベーススクリプトは db フォルダーに保存されます。
- Javaソースコードは src フォルダーに保存されます。
- 画像、js、META-INF、スタイル(css)は war フォルダーに保存されます。
- JSPは jsp フォルダーに保存されます。
- サードパーティのjarファイルは lib フォルダーに保存されます。
- Javaクラスファイルは WEB-INF \ classes フォルダーに保存されます。
このプロジェクトは、このチュートリアルの残りの部分で Hello World Faxアプリケーションを形成します。
C:\work\FaxWebApplication>tree
Folder PATH listing
Volume serial number is 00740061 EC1C:ADB1
C:.
+---db
+---src
. +---faxapp
. +---dao
. +---entity
. +---util
. +---web
+---war
+---images
+---js
+---META-INF
+---styles
+---WEB-INF
+---classes
+---jsp
+---lib
このプロジェクトに必要なbuild.xmlは次のとおりです。 少しずつ考えてみましょう。
<?xml version = "1.0"?>
<project name = "fax" basedir = "." default = "build">
<property name = "src.dir" value = "src"/>
<property name = "web.dir" value = "war"/>
<property name = "build.dir" value = "${web.dir}/WEB-INF/classes"/>
<property name = "name" value = "fax"/>
<path id = "master-classpath">
<fileset dir = "${web.dir}/WEB-INF/lib">
<include name = "*.jar"/>
</fileset>
<pathelement path = "${build.dir}"/>
</path>
<target name = "build" description = "Compile source tree java files">
<mkdir dir = "${build.dir}"/>
<javac destdir = "${build.dir}" source = "1.5" target = "1.5">
<src path = "${src.dir}"/>
<classpath refid = "master-classpath"/>
</javac>
</target>
<target name = "clean" description = "Clean output directories">
<delete>
<fileset dir = "${build.dir}">
<include name = "**/*.class"/>
</fileset>
</delete>
</target>
</project>
まず、ソース、Web、およびビルドフォルダーのプロパティをいくつか宣言します。
<property name = "src.dir" value = "src"/>
<property name = "web.dir" value = "war"/>
<property name = "build.dir" value = "${web.dir}/WEB-INF/classes"/>
この例では-
- src.dir は、javaソースファイルがあるプロジェクトのソースフォルダーを指します。
- web.dir は、JSP、web.xml、css、javascriptおよびその他のWeb関連ファイルを見つけることができるプロジェクトのWebソースフォルダーを指します。
- build.dir は、プロジェクトのコンパイルの出力フォルダーを指します。
プロパティは他のプロパティを参照できます。 上記の例に示すように、 build.dir プロパティは web.dir プロパティへの参照を作成します。
この例では、 src.dir はプロジェクトのソースフォルダーを指します。
プロジェクトのデフォルトのターゲットは compile ターゲットです。 しかし、最初に clean ターゲットを見てみましょう。
クリーンターゲットは、名前が示すとおり、ビルドフォルダー内のファイルを削除します。
<target name = "clean" description = "Clean output directories">
<delete>
<fileset dir = "${build.dir}">
<include name = "**/*.class"/>
</fileset>
</delete>
</target>
master-classpathは、クラスパス情報を保持します。 この場合、ビルドフォルダーのクラスとlibフォルダーのjarファイルが含まれます。
<path id = "master-classpath">
<fileset dir = "${web.dir}/WEB-INF/lib">
<include name = "*.jar"/>
</fileset>
<pathelement path = "${build.dir}"/>
</path>
最後に、ファイルをビルドするビルドターゲット。 まず、ビルドディレクトリが存在しない場合は作成します。 次に、javacコマンドを実行します(ターゲットコンパイルとしてjdk1.5を指定します)。 ソースフォルダーとクラスパスをjavacタスクに提供し、ビルドフォルダーにクラスファイルをドロップするように依頼します。
<target name = "build" description = "Compile main source tree java files">
<mkdir dir = "${build.dir}"/>
<javac destdir = "${build.dir}" source = "1.5" target = "1.5" debug = "true"
deprecation = "false" optimize = "false" failonerror = "true">
<src path = "${src.dir}"/>
<classpath refid = "master-classpath"/>
</javac>
</target>
このファイルでAntを実行すると、Javaソースファイルがコンパイルされ、ビルドフォルダーにクラスが配置されます。
次の結果は、Antファイルを実行した結果です-
C:\>ant
Buildfile: C:\build.xml
BUILD SUCCESSFUL
Total time: 6.3 seconds
ファイルはコンパイルされ、 build.dir フォルダーに配置されます。
Ant-ビルドドキュメント
ドキュメントは、どのプロジェクトでも必須です。 ドキュメントは、プロジェクトのメンテナンスにおいて重要な役割を果たします。 Javaは、組み込みの javadoc ツールを使用してドキュメントを簡単にします。 Antは、必要に応じてドキュメントを生成することにより、さらに簡単にします。
ご存じのとおり、javadocツールは柔軟性が高く、多くの構成オプションを使用できます。 Antは、javadocタスクを介してこれらの構成オプションを公開します。 javadocsに慣れていない場合は、次のリンクから始めることをお勧めします:/java/java_documentation [Javaドキュメントチュートリアル]。
次のセクションでは、Antで使用される最も一般的に使用されるjavadocオプションをリストします。
属性
ソースは、 sourcepath 、 sourcepathref 、または sourcefiles を使用して指定できます。
- sourcepath は、ソースファイルのフォルダーを指すために使用されます(例: srcフォルダー)。
- sourcepathref は、path属性(デリゲート.src.dirなど)によって参照されるパスを参照するために使用されます。
- sourcefiles は、個々のファイルをコンマ区切りリストとして指定する場合に使用されます。
宛先パスは、 destdir フォルダー(例:build.dir)を使用して指定されます。
含めるパッケージ名を指定することにより、 javadoc タスクをフィルタリングできます。 これは、パッケージファイルのカンマ区切りリストである packagenames 属性を使用して実現されます。
javadocプロセスをフィルター処理して、パブリック、プライベート、パッケージ、または保護されたクラスとメンバーのみを表示できます。 これは、 private 、 public 、 package 、および protected 属性を使用して実現されます。
また、javadocタスクに、それぞれの属性を使用して作成者とバージョンの情報を含めるように指示することもできます。
*group* 属性を使用してパッケージをグループ化して、ナビゲートしやすくすることもできます。
すべてを一緒に入れて
*Hello world* Faxアプリケーションのテーマを続けましょう。 FAXアプリケーションプロジェクトにドキュメントターゲットを追加しましょう。
以下に、プロジェクトで使用されるjavadocタスクの例を示します。 この例では、ソースディレクトリとして src.dir を使用し、ターゲットとして doc を使用するようにjavadocを指定しています。
また、Javaドキュメンテーションページに表示されるウィンドウタイトル、ヘッダー、およびフッター情報をカスタマイズしました。
また、我々は3つのグループを作成しました-
- ソースフォルダー内のユーティリティクラス用
- ユーザーインターフェイスクラス用
- データベース関連のクラス用です。
データパッケージグループには、faxapp.entityとfaxapp.daoの2つのパッケージがあります。
<target name = "generate-javadoc">
<javadoc packagenames = "faxapp.*" sourcepath = "${src.dir}"
destdir = "doc" version = "true" windowtitle = "Fax Application">
<doctitle><![CDATA[= Fax Application =]]></doctitle>
<bottom>
<![CDATA[Copyright © 2011. All Rights Reserved.]]>
</bottom>
<group title = "util packages" packages = "faxapp.util.*"/>
<group title = "web packages" packages = "faxapp.web.*"/>
<group title = "data packages" packages = "faxapp.entity.*:faxapp.dao.*"/>
</javadoc>
<echo message = "java doc has been generated!"/>
</target>
javadoc Antタスクを実行してみましょう。 javaドキュメントファイルを生成し、docフォルダーに配置します。
- javadocターゲット*が実行されると、次の結果が生成されます-
C:\>ant generate-javadoc
Buildfile: C:\build.xml
java doc has been generated!
BUILD SUCCESSFUL
Total time: 10.63 second
これで、Javaドキュメントファイルが doc フォルダーに存在します。
通常、javadocファイルはリリースまたはパッケージターゲットの一部として生成されます。
Ant-JARファイルの作成
Javaソースファイルをコンパイルした後の次の論理ステップは、Javaアーカイブ、つまりJARファイルをビルドすることです。 jar タスクを使用すると、AntでJARファイルを作成するのは非常に簡単です。 jarタスクの一般的に使用される属性は次のとおりです-
Sr.No. | Attributes & Description |
---|---|
1 |
basedir 出力JARファイルのベースディレクトリ。 デフォルトでは、これはプロジェクトのベースディレクトリに設定されます。 |
2 |
compress JARファイルを作成するときにファイルを圧縮するようにAntにアドバイスします。 |
3 |
keepcompression
|
4 |
destfile 出力JARファイルの名前。 |
5 |
duplicate 重複ファイルが見つかった場合の対処方法についてAntにアドバイスします。 重複ファイルを追加、保存、または失敗させることができます。 |
6 |
excludes これらのファイルのコンマ区切りリストをパッケージに含めないようにAntに助言します。 |
7 |
excludesfile 上記と同じですが、除外ファイルはパターンを使用して指定されます。 |
8 |
inlcudes 除外の逆。 |
9 |
includesfile excludesfileの逆。 |
10 |
update ビルド済みのJARファイル内のファイルを上書きするようにAntにアドバイスします。 |
*Hello World* Fax Applicationプロジェクトを続けて、jarファイルを生成する新しいターゲットを追加しましょう。 しかし、その前に、以下に示すjarタスクについて考えてみましょう。
<jar destfile = "${web.dir}/lib/util.jar"
basedir = "${build.dir}/classes"
includes = "faxapp/util/**"
excludes = "**/Test.class"/>
ここで、 web.dir プロパティはWebソースファイルのパスを指します。 私たちの場合、これはutil.jarが配置される場所です。
この例の build.dir プロパティは、util.jarのクラスファイルがあるビルドフォルダーを指します。
この例では、* faxapp.util。*パッケージのクラスを使用して *util.jar というjarファイルを作成します。 ただし、Testという名前で終わるクラスは除外しています。 出力jarファイルは、Webアプリケーションのlibフォルダーに配置されます。
util.jarを実行可能なjarファイルにしたい場合は、 Main-Class メタ属性を持つ manifest を追加する必要があります。
したがって、上記の例は次のように更新されます-
<jar destfile = "${web.dir}/lib/util.jar"
basedir = "${build.dir}/classes"
includes = "faxapp/util/**"
excludes = "**/Test.class">
<manifest>
<attribute name = "Main-Class" value = "com.finddevguides.util.FaxUtil"/>
</manifest>
</jar>
jarタスクを実行するには、ターゲット(最も一般的にはビルドまたはパッケージターゲット)内にラップして実行します。
<target name = "build-jar">
<jar destfile = "${web.dir}/lib/util.jar"
basedir = "${build.dir}/classes"
includes = "faxapp/util/**"
excludes = "**/Test.class">
<manifest>
<attribute name = "Main-Class" value = "com.finddevguides.util.FaxUtil"/>
</manifest>
</jar>
</target>
このファイルでAntを実行すると、util.jarファイルが作成されます。
次の結果は、Antファイルを実行した結果です-
C:\>ant build-jar
Buildfile: C:\build.xml
BUILD SUCCESSFUL
Total time: 1.3 seconds
これで、util.jarファイルが出力フォルダーに配置されます。
Ant-WARファイルの作成
Antを使用したWARファイルの作成は非常に簡単で、JARファイルの作成タスクに非常に似ています。 結局、JARファイルのようなWARファイルは単なる別のZIPファイルです。
WARタスクはJARタスクの拡張機能ですが、WEB-INF/classesフォルダーに入る内容を操作し、web.xmlファイルを生成するための素晴らしい追加機能がいくつかあります。 WARタスクは、WARファイルの特定のレイアウトを指定するのに役立ちます。
WARタスクはJARタスクの拡張であるため、JARタスクのすべての属性がWARタスクに適用されます。
Sr.No. | Attributes & Description |
---|---|
1 |
webxml web.xmlファイルへのパス |
2 |
lib WEB-INF \ libフォルダーに入れるものを指定するグループ。 |
3 |
classes WEB-INF \ classesフォルダーの内容を指定するグループ。 |
4 |
metainf MANIFEST.MFファイルを生成するための指示を指定します。 |
*Hello World* Fax Applicationプロジェクトを続けて、jarファイルを生成する新しいターゲットを追加しましょう。 しかしその前に、戦争の課題を考えてみましょう。 次の例を考慮してください-
<war destfile = "fax.war" webxml = "${web.dir}/web.xml">
<fileset dir = "${web.dir}/WebContent">
<include name = "**/*.*"/>
</fileset>
<lib dir = "thirdpartyjars">
<exclude name = "portlet.jar"/>
</lib>
<classes dir = "${build.dir}/web"/>
</war>
前の例のように、 web.dir 変数はソースWebフォルダー、つまりJSP、css、javascriptファイルなどを含むフォルダーを参照します。
*build.dir* 変数は出力フォルダーを参照します-これは、WARパッケージのクラスが見つかる場所です。 通常、クラスはWARファイルのWEB-INF/classesフォルダーにバンドルされます。
この例では、fax.warというwarファイルを作成しています。 WEB.XMLファイルは、Webソースフォルダーから取得されます。 Webの下の「WebContent」フォルダーのすべてのファイルがWARファイルにコピーされます。
WEB-INF/libフォルダーには、thirdpartyjarsフォルダーのjarファイルが取り込まれます。 ただし、portlet.jarはアプリケーションサーバーのlibフォルダーに既に存在するため、除外しています。 最後に、ビルドディレクトリのWebフォルダーからすべてのクラスをコピーし、WEB-INF/classesフォルダーに入れています。
warタスクをAntターゲット(通常はパッケージ)内にラップして実行します。 これにより、指定した場所にWARファイルが作成されます。
クラス、lib、metainf、webinfディレクタをネストして、プロジェクト構造のどこにでも散在するフォルダに配置することは完全に可能です。 ただし、ベストプラクティスでは、WebプロジェクトはWARファイルの構造に類似したWebコンテンツ構造を持つ必要があることを示唆しています。 FAXアプリケーションプロジェクトの構造は、この基本原則を使用して概説されています。
warタスクを実行するには、ターゲット(最も一般的にはビルドまたはパッケージターゲット)内にラップして実行します。
<target name = "build-war">
<war destfile = "fax.war" webxml = "${web.dir}/web.xml">
<fileset dir = "${web.dir}/WebContent">
<include name = "**/*.*"/>
</fileset>
<lib dir = "thirdpartyjars">
<exclude name = "portlet.jar"/>
</lib>
<classes dir = "${build.dir}/web"/>
</war>
</target>
このファイルでAntを実行すると、 fax.war ファイルが作成されます。
次の結果は、Antファイルを実行した結果です-
C:\>ant build-war
Buildfile: C:\build.xml
BUILD SUCCESSFUL
Total time: 12.3 seconds
fax.warファイルは、出力フォルダーに配置されます。 戦争ファイルの内容は次のようになります-
fax.war:
+---jsp This folder contains the jsp files
+---css This folder contains the stylesheet files
+---js This folder contains the javascript files
+---images This folder contains the image files
+---META-INF This folder contains the Manifest.Mf
+---WEB-INF
+---classes This folder contains the compiled classes
+---lib Third party libraries and the utility jar files
WEB.xml Configuration file that defines the WAR package
Ant-パッケージングアプリケーション
*Hello World* Fax Webアプリケーションを少しずつ使用して、Antのさまざまな側面を学びました。
ここで、すべてをまとめて完全で完全なbuild.xmlファイルを作成します。 次のように build.properties と build.xml ファイルを考慮してください-
build.properties
deploy.path = c:\tomcat6\webapps
build.xml
<?xml version = "1.0"?>
<project name = "fax" basedir = "." default = "usage">
<property file = "build.properties"/>
<property name = "src.dir" value = "src"/>
<property name = "web.dir" value = "war"/>
<property name = "javadoc.dir" value = "doc"/>
<property name = "build.dir" value = "${web.dir}/WEB-INF/classes"/>
<property name = "name" value = "fax"/>
<path id = "master-classpath">
<fileset dir = "${web.dir}/WEB-INF/lib">
<include name = "*.jar"/>
</fileset>
<pathelement path = "${build.dir}"/>
</path>
<target name = "javadoc">
<javadoc packagenames = "faxapp.*" sourcepath = "${src.dir}"
destdir = "doc" version = "true" windowtitle = "Fax Application">
<doctitle><![CDATA[<h1> = Fax Application = </h1>]]>
</doctitle>
<bottom><![CDATA[Copyright © 2011. All Rights Reserved.]]>
</bottom>
<group title = "util packages" packages = "faxapp.util.*"/>
<group title = "web packages" packages = "faxapp.web.*"/>
<group title = "data packages" packages = "faxapp.entity.*:faxapp.dao.*"/>
</javadoc>
</target>
<target name = "usage">
<echo message = ""/>
<echo message = "${name} build file"/>
<echo message = "-----------------------------------"/>
<echo message = ""/>
<echo message = "Available targets are:"/>
<echo message = ""/>
<echo message = "deploy --> Deploy application as directory"/>
<echo message = "deploywar --> Deploy application as a WAR file"/>
<echo message = ""/>
</target>
<target name = "build" description = "Compile main source tree java files">
<mkdir dir = "${build.dir}"/>
<javac destdir = "${build.dir}" source = "1.5" target = "1.5" debug = "true"
deprecation = "false" optimize = "false" failonerror = "true">
<src path = "${src.dir}"/>
<classpath refid = "master-classpath"/>
</javac>
</target>
<target name = "deploy" depends = "build" description = "Deploy application">
<copy todir = "${deploy.path}/${name}" preservelastmodified = "true">
<fileset dir = "${web.dir}">
<include name = "**/*.*"/>
</fileset>
</copy>
</target>
<target name = "deploywar" depends = "build" description =
"Deploy application as a WAR file">
<war destfile = "${name}.war" webxml = "${web.dir}/WEB-INF/web.xml">
<fileset dir = "${web.dir}">
<include name = "**/*.*"/>
</fileset>
</war>
<copy todir = "${deploy.path}" preservelastmodified = "true">
<fileset dir = ".">
<include name = "*.war"/>
</fileset>
</copy>
</target>
<target name = "clean" description = "Clean output directories">
<delete>
<fileset dir = "${build.dir}">
<include name = "**/*.class"/>
</fileset>
</delete>
</target>
</project>
この例では-
- まず、ビルドプロパティファイルでTomcatのwebappsフォルダーへのパスを deploy.path 変数として宣言します。
- また、 src.dir 変数でjavaファイルのソースフォルダーを宣言します。
- 次に、 web.dir 変数でWebファイルのソースフォルダーを宣言します。 javadoc.dir はJavaドキュメントを保存するためのフォルダーです。 build.dir はビルド出力ファイルを保存するためのパスです。
- 次に、Webアプリケーションの名前を宣言します。この例では fax です。
- また、プロジェクトのWEB-INF/libフォルダーにあるJARファイルを含むマスタークラスパスを定義します。
- また、マスタークラスパスの build.dir にあるクラスファイルも含めます。
- Javadocターゲットは、プロジェクトに必要なjavadocを生成し、使用ターゲットは、ビルドファイルに存在する一般的なターゲットを印刷するために使用されます。
上記の例は、 deploy と* deploywar。*の2つの展開ターゲットを示しています。
展開ターゲットは、ファイルをWebディレクトリから展開ディレクトリにコピーし、最終変更日時スタンプを保持します。 これは、ホットデプロイメントをサポートするサーバーにデプロイするときに役立ちます。
cleanターゲットは、以前にビルドされたすべてのファイルをクリアします。
deploywarターゲットはwarファイルをビルドしてから、warファイルをアプリケーションサーバーのdeployディレクトリにコピーします。
Ant-アプリケーションのデプロイ
前の章では、アプリケーションをパッケージ化してフォルダーにデプロイする方法を学びました。
この章では、Webアプリケーションをアプリケーションサーバーのdeployフォルダーに直接デプロイします。次に、いくつかのAntターゲットを追加して、サービスを開始および停止します。 Hello World ファックスWebアプリケーションを続けましょう。 これは前の章の続きで、新しいコンポーネントは*太字*で強調表示されています。
build.properties
# Ant properties for building the springapp
appserver.home = c:\\install\\apache-tomcat-7.0.19
# for Tomcat 5 use $appserver.home}/server/lib
# for Tomcat 6 use $appserver.home}/lib
appserver.lib = ${appserver.home}/lib
deploy.path = ${appserver.home}/webapps
tomcat.manager.url = http://www.finddevguides.com:8080/manager
tomcat.manager.username = finddevguides
tomcat.manager.password = secret
build.xml
<?xml version = "1.0"?>
<project name = "fax" basedir = "." default = "usage">
<property file = "build.properties"/>
<property name = "src.dir" value = "src"/>
<property name = "web.dir" value = "war"/>
<property name = "javadoc.dir" value = "doc"/>
<property name = "build.dir" value = "${web.dir}/WEB-INF/classes"/>
<property name = "name" value = "fax"/>
<path id = "master-classpath">
<fileset dir = "${web.dir}/WEB-INF/lib">
<include name = "*.jar"/>
</fileset>
<pathelement path = "${build.dir}"/>
</path>
<target name = "javadoc">
<javadoc packagenames = "faxapp.*" sourcepath = "${src.dir}"
destdir = "doc" version = "true" windowtitle = "Fax Application">
<doctitle><![CDATA[<h1> = Fax Application = </h1>]]></doctitle>
<bottom><![CDATA[Copyright © 2011. All Rights Reserved.]]></bottom>
<group title = "util packages" packages = "faxapp.util.*"/>
<group title = "web packages" packages = "faxapp.web.*"/>
<group title = "data packages" packages = "faxapp.entity.*:faxapp.dao.*"/>
</javadoc>
</target>
<target name = "usage">
<echo message = ""/>
<echo message = "${name} build file"/>
<echo message = "-----------------------------------"/>
<echo message = ""/>
<echo message = "Available targets are:"/>
<echo message = ""/>
<echo message = "deploy --> Deploy application as directory"/>
<echo message = "deploywar --> Deploy application as a WAR file"/>
<echo message = ""/>
</target>
<target name = "build" description = "Compile main source tree java files">
<mkdir dir = "${build.dir}"/>
<javac destdir = "${build.dir}" source = "1.5" target = "1.5" debug = "true"
deprecation = "false" optimize = "false" failonerror = "true">
<src path = "${src.dir}"/>
<classpath refid = "master-classpath"/>
</javac>
</target>
<target name = "deploy" depends = "build" description = "Deploy application">
<copy todir = "${deploy.path}/${name}"
preservelastmodified = "true">
<fileset dir = "${web.dir}">
<include name = "**/*.*"/>
</fileset>
</copy>
</target>
<target name = "deploywar" depends = "build" description =
"Deploy application as a WAR file">
<war destfile = "${name}.war" webxml = "${web.dir}/WEB-INF/web.xml">
<fileset dir = "${web.dir}">
<include name = "**/*.*"/>
</fileset>
</war>
<copy todir = "${deploy.path}" preservelastmodified = "true">
<fileset dir = ".">
<include name = "*.war"/>
</fileset>
</copy>
</target>
<target name = "clean" description = "Clean output directories">
<delete>
<fileset dir = "${build.dir}">
<include name = "**/*.class"/>
</fileset>
</delete>
</target>
<!-- ============================================================ -->
<!-- Tomcat tasks -->
<!-- ============================================================ -->
<path id = "catalina-ant-classpath">
<!-- We need the Catalina jars for Tomcat -->
<!-- * for other app servers - check the docs -->
<fileset dir = "${appserver.lib}">
<include name = "catalina-ant.jar"/>
</fileset>
</path>
<taskdef name = "install" classname = "org.apache.catalina.ant.InstallTask">
<classpath refid = "catalina-ant-classpath"/>
</taskdef>
<taskdef name = "reload" classname = "org.apache.catalina.ant.ReloadTask">
<classpath refid = "catalina-ant-classpath"/>
</taskdef>
<taskdef name = "list" classname = "org.apache.catalina.ant.ListTask">
<classpath refid = "catalina-ant-classpath"/>
</taskdef>
<taskdef name = "start" classname = "org.apache.catalina.ant.StartTask">
<classpath refid = "catalina-ant-classpath"/>
</taskdef>
<taskdef name = "stop" classname = "org.apache.catalina.ant.StopTask">
<classpath refid = "catalina-ant-classpath"/>
</taskdef>
<target name = "reload" description = "Reload application in Tomcat">
<reload url = "${tomcat.manager.url}"username = "${tomcat.manager.username}"
password = "${tomcat.manager.password}" path = "/${name}"/>
</target>
</project>
この例では、Tomcatをアプリケーションサーバーとして使用しています。 まず、ビルドプロパティファイルで、いくつかの追加プロパティを定義しました。
- appserver.home は、Tomcatアプリケーションサーバーへのインストールパスを指します。
- appserver.lib は、Tomcatインストールフォルダー内のライブラリファイルを指します。
- deploy.path 変数は、Tomcatのwebappフォルダーを指すようになりました。
Tomcatマネージャーアプリケーションを使用して、Tomcatのアプリケーションを停止および開始できます。 マネージャーアプリケーションのURL、ユーザー名、パスワードもbuild.propertiesファイルで指定されます。 次に、 catalina-ant.jar を含む新しいCLASSPATHを宣言します。 このjarファイルは、Apache Antを介してTomcatタスクを実行するために必要です。
catalina-ant.jarは、次のタスクを提供します-
Sr.No. | Properties & Description |
---|---|
1 |
InstallTask Webアプリケーションをインストールします。 クラス名:org.apache.catalina.ant.InstallTask |
2 |
ReloadTask Webアプリケーションをリロードします。 クラス名:org.apache.catalina.ant.ReloadTask |
3 |
ListTask すべてのWebアプリケーションをリストします。 クラス名:org.apache.catalina.ant.ListTask |
4 |
StartTask Webアプリケーションを開始します。 クラス名:org.apache.catalina.ant.StartTask |
5 |
StopTask Webアプリケーションを停止します。 クラス名:org.apache.catalina.ant.StopTask |
6 |
ReloadTask 停止せずにWebアプリケーションをリロードします。 クラス名:org.apache.catalina.ant.ReloadTask |
リロードタスクには、次の追加パラメータが必要です-
マネージャーアプリケーションへのURL
Webアプリケーションを再起動するユーザー名
Webアプリケーションを再起動するためのパスワード
再起動するWebアプリケーションの名前
*deploy-war* コマンドを発行してwebappをTomcat webappsフォルダーにコピーしてから、Fax Webアプリケーションをリロードしましょう。 次の結果は、Antファイルを実行した結果です-
C:\>ant deploy-war
Buildfile: C:\build.xml
BUILD SUCCESSFUL
Total time: 6.3 seconds
C:\>ant reload
Buildfile: C:\build.xml
BUILD SUCCESSFUL
Total time: 3.1 seconds
上記のタスクを実行すると、Webアプリケーションがデプロイされ、Webアプリケーションがリロードされます。
Ant-Javaコードの実行
Antを使用してJavaコードを実行できます。 次の例では、javaクラスが引数(管理者の電子メールアドレス)を受け取り、電子メールを送信します。
public class NotifyAdministrator {
public static void main(String[] args) {
String email = args[0];
notifyAdministratorviaEmail(email);
System.out.println("Administrator "+email+" has been notified");
}
public static void notifyAdministratorviaEmail(String email) {
//......
}
}
このjavaクラスを実行する簡単なビルドを次に示します。
<?xml version = "1.0"?>
<project name = "sample" basedir = "." default = "notify">
<target name = "notify">
<java fork = "true" failonerror = "yes" classname = "NotifyAdministrator">
<arg line = "[email protected]"/>
</java>
</target>
</project>
ビルドが実行されると、次の結果が生成されます-
C:\>ant
Buildfile: C:\build.xml
notify: [java] Administrator [email protected] has been notified
BUILD SUCCESSFUL
Total time: 1 second
この例では、Javaコードは単純なことを行います-電子メールを送信します。 それには、Antタスクに組み込まれているものを使用できます。 ただし、アイデアが得られたので、ビルドファイルを拡張して、複雑なことを実行するJavaコードを呼び出すことができます。たとえば、ソースコードを暗号化します。
Ant-Eclipse統合
Eclipseを既にダウンロードしてインストールしている場合、始めるために行うことはほとんどありません。 EclipseにはAntプラグインがあらかじめバンドルされており、すぐに使用できます。
簡単な手順に従って、AntをEclipseに統合します。
- build.xmlがJavaプロジェクトの一部であり、プロジェクトの外部の場所にないことを確認してください。
- * Window> Show View> Other> Ant> Ant。*に従ってAntビューを有効にします。
- Project Explorerを開き、build.xmlをAntビューにドラッグします。
Antビューは次のようになります-
ターゲットをクリックして、ビルド/クリーン/使用すると、ターゲットでAntが実行されます。
「ファックス」をクリックすると、デフォルトのターゲット-* usage。*が実行されます。
Ant Eclipseプラグインには、build.xmlファイルを編集するための優れたエディターも付属しています。 エディターはbuild.xmlスキーマを認識しており、コード補完を支援できます。
Antエディターを使用するには、(プロジェクトエクスプローラーから)build.xmlを右クリックし、[アプリケーションから開く]> [Antエディター]を選択します。 Antエディターは次のようになります-
Antエディターは、右側にターゲットをリストします。 ターゲットリストは、特定のターゲットの編集に直接ジャンプできるブックマークとして機能します。
Ant-JUnit統合
JUnitは、Javaベースの開発で一般的に使用されるユニットテストフレームワークです。 使いやすく、拡張も簡単です。 多数のJUnit拡張機能が利用可能です。 JUnitに慣れていない場合は、http://junit.org/[www.junit.org]からダウンロードして、そのマニュアルを読む必要があります。
この章では、Antを使用してJUnitテストを実行する方法を示します。 Antは、JUnitタスクを直接実行します。
JUnitタスクの属性は以下に示されています-
Sr.No. | Properties & Description |
---|---|
1 |
dir VMの呼び出し元。 fork が無効な場合、これは無視されます。 |
2 |
jvm JVMを呼び出すために使用されるコマンド。 fork が無効な場合、これは無視されます。 |
3 |
fork 別のJVMでテストを実行します |
4 |
errorproperty JUnitエラーがある場合に設定するプロパティの名前 |
5 |
failureproperty JUnitエラーが発生した場合に設定するプロパティの名前 |
6 |
haltonerror テストエラーが発生すると実行を停止します |
7 |
haltonfailure 障害が発生すると実行を停止します |
8 |
printsummary Antに各テストの簡単な統計を表示するようにアドバイスします |
9 |
showoutput ログとフォーマッタに出力を送信するようにAntにアドバイスします |
10 |
tempdir Antが使用する一時ファイルへのパス |
11 |
timeout この設定(ミリ秒単位)よりも実行に時間がかかるテストを終了します。 |
*Hello World* Fax Webアプリケーションのテーマを続けて、JUnitターゲットを追加しましょう。
次の例は、単純なJUnitテストの実行を示しています-
<target name = "unittest">
<junit haltonfailure = "true" printsummary = "true">
<test name = "com.finddevguides.UtilsTest"/>
</junit>
</target>
この例は、com.finddevguides.UtilsTest junitクラスでのJUnitの実行を示しています。 上記のコードを実行すると、次の出力が生成されます-
test:
[echo] Testing the application
[junit] Running com.finddevguides.UtilsTest
[junit] Tests run: 12, Failures: 0, Errors: 0, Time elapsed: 16.2 sec
BUILD PASSED
Ant-Antの拡張
Antには事前定義された一連のタスクが付属していますが、以下の例に示すように、独自のタスクを作成できます。
カスタムAntタスクは org.apache.tools.ant.Task クラスを拡張し、execute()メソッドを拡張する必要があります。 以下は簡単な例です-
package com.finddevguides.ant;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.BuildException;
public class MyTask extends Task {
String message;
public void execute() throws BuildException {
log("Message: " + message, Project.MSG_INFO);
}
public void setMessage(String message) {
this.message = message;
}
}
カスタムタスクを実行するには、次を Hello World Fax Webアプリケーションに追加する必要があります-
<target name = "custom">
<taskdef name = "custom" classname = "com.finddevguides.ant.MyTask"/>
<custom message = "Hello World!"/>
</target>
上記のカスタムタスクを実行すると、「Hello World!」というメッセージが出力されます
c:\>ant custom
test:
[custom] Message : Hello World!
elapsed: 0.2 sec
BUILD PASSED
これは単なる単純な例です。Antのパワーを使用して、ビルドおよびデプロイメントプロセスを改善するために必要なことを実行できます。 Ant-questions-answers