JavaとAntを使用してビルドプロセスを自動化する
定義されたプロセスは、ソフトウェア開発で最も必要ですが、ほとんど使用されないツールの1つです。本来、開発作業に伴うオーバーヘッドタスクです。定義されたビルドプロセスにより、ビルドが実行されるたびに、開発プロジェクトのソフトウェアがまったく同じ方法でビルドされます。ビルドプロセスがより複雑になると(たとえば、EJBビルドや追加のタスクなど)、そのような標準化を実現する必要性が高まります。正確な一連の手順を可能な限り確立、文書化、および自動化する必要があります。
定義済みのビルドプロセスが必要なのはなぜですか?
定義されたビルドプロセスは、開発、統合、テスト、および本番環境の間のギャップを埋めるのに役立つため、開発サイクルの重要な部分です。ビルドプロセスだけで、ある環境から別の環境へのソフトウェアの移行が高速化されます。また、コンパイル、クラスパス、または多くのプロジェクトの時間と費用がかかるプロパティに関連する多くの問題を取り除きます。
Antとは何ですか?
Antは、プラットフォームに依存しないスクリプトツールであり、CまたはC ++の「make」ツールとほぼ同じ方法でビルドスクリプトを作成できます。Antには、カスタマイズなしで多数の組み込みタスクを使用できます。最も重要なタスクのいくつかを次の表に示しますが、次の例でより詳細に説明します。
Antディストリビューションに組み込まれている便利なコマンドを次に示します。
コマンド | 説明 |
---|---|
蟻 | 現在のantプロセス内から別のantプロセスを実行するために使用されます。 |
Copydir | ディレクトリ全体をコピーするために使用されます。 |
コピーファイル | 単一のファイルをコピーするために使用されます。 |
Cvs | CVSリポジトリから取得したパッケージ/モジュールを処理します。 |
削除 | 指定したディレクトリとそのサブディレクトリ内の単一のファイルまたはすべてのファイルを削除します。 |
デルツリー | すべてのファイルとサブディレクトリを含むディレクトリを削除します。 |
Exec | システムコマンドを実行します。os属性が指定されている場合、コマンドは、指定されたオペレーティングシステムの1つでAntが実行されている場合にのみ実行されます。 |
取得する | URLからファイルを取得します。 |
ジャー | ファイルのセットを瓶詰めします。 |
Java | 実行中の(Ant)VM内でJavaクラスを実行するか、指定されている場合は別のVMをフォークします。 |
Javac | 実行中の(Ant)VM内でソースツリーをコンパイルします。 |
Javadoc / Javadoc2 | javadocツールを使用してコードドキュメントを生成します。 |
Mkdir | ディレクトリを作成します。 |
プロパティ | プロジェクト内のプロパティ(名前と値による)またはプロパティのセット(ファイルまたはリソースから)を設定します。 |
Rmic | 特定のクラスに対してrmicコンパイラを実行します。 |
スタンプ | 現在のプロジェクトのDSTAMP、TSTAMP、およびTODAYプロパティを設定します。 |
スタイル | XSLTを介して一連のドキュメントを処理します。 |
ソフトウェアビルドを行うために他のツールを利用できますが、Antは使いやすく、数分で習得できます。さらに、Antでは、そのクラスの一部を拡張することにより、拡張機能を作成できます。この拡張を次の例で示します。
Antを使用するには何が必要ですか?
Antを実行するには、マシンにJDK、XMLパーサー、およびAntの3つのコンポーネントをインストールする必要があります(リンクについては「参考文献」を参照)。
多くの場合、XMLパーサーはサーブレットランナーまたはWebサーバーで配布されるlibファイルの一部です。そうでない場合は、java.sun.comの無料のXMLパーサーで十分です。
Antのインストールは、ファイルのダウンロード、クラスライブラリのクラスパスへの追加、およびAntバイナリのパスへの追加で構成されます。
シナリオ例
このシナリオ例は、Antの価値を示し、その利点とその使用方法についての洞察を提供するのに役立ちます。
現在のJava開発の多くはサーバー側Javaに焦点を合わせているため、この例ではサーバー側アプリケーションを選択しました。サーバー側のJavaアプリケーションで作業する開発者は、通常、サーブレットのコンパイル、JSPファイルのデプロイメント、およびHTMLファイル、構成ファイル、またはイメージのデプロイメントに関心があります。
このビルドを実行するための一般的なスキームには、サーバーのオペレーティングシステムに基づいたプラットフォーム固有の言語での小さなスクリプトの開発が含まれます。たとえば、NTマシンで作業している開発者は、コンパイルタスクを実行してから展開を実行するバッチファイルを作成できます。ただし、実稼働環境にUnixまたはLinuxがある場合、開発者はスクリプトを書き直して、スクリプトが同期していることを確認する必要があります。
OK、これがどのように機能するか教えてください
ですから、Antを使用する必要があることを確信し、インストールがいかに簡単であるかを示したことを願っています。次に、単純なコンパイルとデプロイメントを実行する例をステップスルーすることにより、Antがいかに単純であるかを示します。
Antを使用した単純なビルドプロセス(simple.xml)
上記の例では、説明することがたくさんあります。まず、simple.xmlファイルの構造を理解する必要があります。これは、複数のターゲットエンティティで構成されるプロジェクトエンティティを含む、適切にフォーマットされたXMLファイルです。
最初の行には、構築されるプロジェクト全体に関する情報が含まれています。
プロジェクトラインの中で最も重要な要素があるdefault
とbasedir
。
このdefault
属性は、実行されるデフォルトのターゲットを参照します。Antはコマンドラインビルドツールであるため、Antファイル内のターゲットステップのサブセットのみを実行できます。たとえば、次のコマンドを実行できます。
%ant -buildfile simple.xml init
これant
により、コマンドが実行され、init
ターゲットに到達するまでsimple.xmlファイルが実行されます。したがって、この例では、デフォルトはdeploy
です。次の行で呼び出されるAntプロセスはsimple.xml
、deploy
コマンドに到達するまでファイルを実行します。
%ant -buildfile simple.xml
このbasedir
属性は、ビルドファイルに含まれる相対参照が取得されるベースディレクトリであるため、かなり自明です。各プロジェクトは1つのbasedir
属性しか持てないため、完全修飾ディレクトリの場所を含めるか、大きなプロジェクトファイルを異なるbasedir
属性を持つ小さなプロジェクトファイルに分割するかを選択できます。
次の関心のある行はターゲット行です。2つの異なるバージョンがここに示されています:
target
要素は、4つの属性が含まれていますname
、if
、unless
、とdepends
。Antにはname
属性が必要ですが、他の3つの属性はオプションです。
を使用するdepends
と、Antタスクをスタックして、依存するタスクが完了するまで依存タスクが開始されないようにすることができます。上記の例では、init
タスクが完了するまでクリーンタスクは開始されません。depends
属性も議論のタスクはに依存していることをいくつかのタスクを示すカンマ区切りのリストが含まれていてもよいです。
コマンドを使用すると、いずれかの実行されるべきコマンドを指定せた場合に、特定のプロパティが設定されたりしない限り、そのプロパティが設定されています。プロパティ値が設定されているときに実行されると、値が設定されていない場合に実行されます。次の例に示すように、コマンドを使用してこれらのプロパティを設定するか、コマンドラインから設定できます。if
unless
if
unless
available
init
簡単な例のターゲットには、次のように4行のproperty
コマンドが含まれています。
これらのproperty
行を使用すると、一般的に使用されるディレクトリまたはファイルを指定できます。プロパティは、ディレクトリまたはファイルを物理エンティティではなく論理エンティティとして参照できるようにする単純な名前と値のペアです。
sourceDir
後でAntファイルで変数を参照する場合は、次の構文を使用して、このタグの値を取得するようにAntに警告することができます${sourceDir}
。
上記のビルドファイルに存在する他の2つのコマンドは次のとおりです。
これらのコマンドは、outputDir
(またはclasses
上記のように逆参照された場合はディレクトリ)に無関係なファイルがないことを確認するために使用されます。最初のコマンドは、の下に含まれるツリー全体を削除しますoutputDir
。2番目のコマンドは、ディレクトリを再度作成します。
開発者にとって大きな関心のある最後の行は、次のコンパイル行です。
このjavac
コマンドには、ソースディレクトリ(.javaファイルの入力場所)と宛先ディレクトリ(.classesファイルの出力場所)が必要です。すべてのディレクトリは、ant
コマンドを実行する前に存在するか、コマンドを使用して作成する必要があることに注意してくださいmkdir
。Antは直感に基づいてディレクトリを作成しないため、上記のコンパイル手順の前にコマンドoutputDir
を使用してを作成する必要がありますmkdir
。
後compile
タスクが完了した、deploy
タスクは展開ディレクトリにソースディレクトリからすべてのJSPファイルを移動するためにコピー操作を実行します。このcopydir
コマンドを使用して、JSPディレクトリ全体をある場所から別の場所にコピーします。このcopyfile
コマンドを使用して、ビルドの一部として単一のプロパティファイルをコピーしました。
例を説明するのに数行かかりましたが、Antが使いやすいツールであることは明らかです。このビルドファイルを開始点として使用すると、Antを開発作業に組み込むことができるはずです。ant
上記の例に示すコマンドは、残りはドキュメントの参照先と一緒に、あなたに任され、そのうちのいくつかは、この記事で説明され、さらに機能性を持っています。
重要なタスク
Antディストリビューションに含まれている組み込みタスクを読むのはあなたに任されています。各コマンドの詳細については、「参考文献」のユーザーガイドを参照してください。カスタマイズなしでビルドマネージャーが使用できる追加オプションの例として、一般的に使用される2つのコマンドを選択しました。
コードのコンパイル(EJBを含む)
前に説明した簡単な例では、javac
コマンドの簡単な形式を見ました。これをさらに詳しく調べると、非推奨、デバッグ、最適化などのコンパイルフラグと、コンパイルに含まれるファイルと含まれないファイルを指定できることがわかります。
タスクinclude/exclude
内のエンティティを使用javac
して、name
属性のパターンに一致するファイルをコンパイルから含める/除外することができます。上記の例から、.javaで終わる任意のディレクトリに含まれるファイルを含めたいが、同時に、プロパティbsf.present
がtrueに設定されていない限り、Script.javaという名前のファイルを除外したい。
bsf.present
指定されたクラス名をクラスパスでbsf.present
検索し、検索結果に従って設定する次のタスクを使用して、プロパティを設定します。
このjavac
コマンドには、上記のexcludeコマンドに基づくコンパイルからのversion.txtというファイルは含まれません。
javadocの生成
Antが自動化に役立つもう1つのタスクは、javadocの生成です。次のコマンドを使用して、javadocを生成できます。
パッケージは、javadocに含まれるパッケージ全体を指定します。このsourcepath
属性は、ソースファイルの場所を指します。このjavadoc
コマンドは、ウィンドウのタイトルとドキュメントを指定できる属性も提供します。bottom
属性を使用して、各javadocページの下部に著作権表示を含めることもできます。
AntはXYZを実行できますか?
この時点で、Antが自動化できるビルドプロセスで可能なタスクのいくつかを見てきました。これらのタスクは、Antにすぐに含まれています。Antをカスタマイズして、EJBの構築やリモート構成管理の実行など、より難しいタスクを実行できるようにすることをお勧めします。Antのレポート機能を強化したり、Antプロセスを実行できるユーザーインターフェイスを構築したりしたい場合があります。
「AntはXYZを実行できますか?」という質問に対する簡単な答え。「はい、でもカスタマイズが必要な場合があります」です。
Antの拡張
この時点で、2つのAnt拡張機能について説明するのは興味深いことです。これらは、レポートの増加と、Antを使用してリモートでコードを配布する機能です。