ANT自動化構築


本論文では、日常的に開発されているいくつかのant taskについて説明します。プロジェクトディレクトリのレベルは以下の通りであると仮定します。   |-build.properties   |-build.xml   +--buildはbuildタスクで生成されます。   +--db   データベーススクリプトと関連データモデル   +--deploy   部暑カタログとwarバッグ   +--dist  jarファイル     --|-doc     |--アプリ   java doc     |--test  テストレポート   +--etc   各種プロファイル   --|-lib     |--コール  使用済みのサードパーティライブラリファイル     |--ext    依存パケットをテストまたは構築する   +--src   +--test   +--web   展示層関連ファイルはいくつかの従来の変数をbuild.propertiesに保存して、ファイルの再構築と定数変更に有利です。以下は任務単位で話します。
 
1.javacコンパイル
典型的なant taskでは、通常以下のようにjavacタスクを設定します。
<javac destdir="${build.dir}" target="1.5" source="1.5" debug="true">  
      <src path="${src.dir}" />  
      <classpath refid="classpath" />  
 </javac>
debug(default off)コンパイル時にデバッグ情報が出力されますか?
optimize(default off)はコンパイル時に最適化するかどうかを示します。注意:JDK 1.3からsun javacはこのマークを無視します。
ターゲットはclassファイルを生成するJVMバージョンを指定しており、ANTが実際に実行するJDKバージョンに依存します。
fork(default on)は外部JDKを使ってコンパイルされていますか?
failonerror(default true)コンパイルにエラーが発生した場合、buildは失敗します。
他にコンパイルパラメータの設定が必要な場合は、具体的には公式文書Javac部分を参照してください。
 
2.native 2 asciiコマンドのantサポート
I 18 N国際化コードを扱う時、非西欧文字セットは文字化けの問題に遭遇することが多いです。JDKはnative 2 ascii変換ツールを持っていますが、起動が不便で、ANTを使えば半分の効果でこの問題を解決できます。antでは、以下のように1つのnative 2 asiiタスクを定義することができる。
<native2ascii dest="${build.dir}" encoding="UTF-8" src="${etc.dir}/classes" includes="**/*_zh.properties" />
エンコーディングは、デフォルトではJVMコードと同じです。
ext出力ファイルの拡張子の名前を変更します。
他の詳細は、Native 2 Aciiに関する公式サイトを参照して説明することができる。
 
3.Junnitタスクサポート
プロジェクト開発の過程では、ユニットや統合テストによく使われています。手動で実行するだけで混乱しやすく、時間が長くなると忘れられやすくなりますので、初期に自動化タスクを作ることが重要です。ANtのJunnitに対する支持はもうかなりいいです。十分に普通にテストして使って、もっと重要なのは詳細なテストレポートを作成することです。とても魅力的です。次はANtでのJunnitタスクの定義です。
<target name="tests" depends="build,buildtests" description="Run tests">
  <delete dir="${doc.dir}/test" />
  <mkdir dir="${doc.dir}/test" />
  <junit printsummary="on" failureproperty="tests.failed" showoutput="true">
    <classpath refid="classpath" />
    <formatter type="xml" />
    <batchtest todir="${doc.dir}/test">
      <fileset dir="${build.dir}">
        <include name="**/*Tests.*" />
        <exclude name="**/Jdbc*Tests.*" />
      </fileset>
    </batchtest>
  </junit>

  <fail if="tests.failed">
      ***********************************************************
      ****  One or more tests failed!  Check the output ...  ****
      ***********************************************************
  </fail>

  <junitreport todir="${doc.dir}/">
    <fileset dir="${doc.dir}/test">
      <include name="TEST-*.xml" />
    </fileset>
    <report format="frames" todir="${doc.dir}/test/html" />
  </junitreport>
</target>
<junnit>は、一つのjunit task-を定義し、<junnit>の中に、複数のTestCase-を実行し、<junnit>の中にあります。個々のTestCase-<formart>を実行します。junnitレポートを出力します。
 
junnitの中のいくつかの属性
printsummary(default no)は、各テストケースのために単一の行の統計を印刷します。設定できる値はon、off、withOutAndErrです。ここではwithOutAndErrとonは基本的に同じですが、前者はSystem.outとSystem.errにテスト出力を書き込むことができます。fork(default no)は隔離されたVMでテストhaltonerror(default no)を実行します。テスト中にエラーが発生したら構築プロセスを停止します。デフォルトでは出力の書式のみを設定します。formaterの中のいくつかの一般的な属性typeはxml、plinとbrifフォーマットがあります。plinフォーマットはすべてのテスト事例に概略統計を与えます。brifは失敗事例だけに詳細情報を与えます。xmlはhtmlファイルに変換できますが、判例の中のいくつかの不法XML記述を含みません。出力フォーマットを自分で定義することもできます。org.apache.tools.ant.taskdefs.optionl.junnit.JUnit Resilt Formaterを実現すればいいです。
 
JUnit Report内に埋め込まれた要素reportのいくつかの一般的な属性format(default frames)がレポートのフォーマットを生成するには、「noframes」または「frames」stydeir定義styless heetsのディレクトリでなければなりません。
 
ANT Junnitタスクの他の最新情報についてはANT公式文書をご覧ください。それぞれJUnitJUnit Reportを参照してください。
 
4.Javadoc API文書の生成
ANtを使ってjavadocツールを使ってコード文書を作成します。開発によくあります。javadocは、Javaソースファイルを処理する際に、規則に合ったソースファイルディレクトリを再帰的にスキャンする。ワイルドカードを使って、パケット名を選択して、冗長性と管理時間を減らすことができます。このタスクはJavacのようにファイルの変更によって処理できるわけではないので、運行時にはすべてのカバンが処理されます。辛好というタスクの使用頻度はあまり大きくないです。このタスクはJDKバージョンで実行できます。もし定義された属性が運転バージョンよりも高いなら、省略されます。以下は一般的に定義されたjavadocタスクを与えます。
<javadoc classpathref="classpath" packagenames="${javadoc.pkg.name}.*" 
           sourcepath="${src.dir}" charset="${encode}" encoding="${encode}" 
           destdir="${doc.dir}" author="true" version="true" use="true" 
           windowtitle="${name} API">
  <doctitle><![CDATA[<h1>${name}</h1>]]></doctitle>
  <bottom><![CDATA[<i>Copyright©2007 ${organization}. All Rights Reserved.</i>]]></bottom>
  <tag name="todo" scope="all" description="To do:" />
</javadoc>
sourcepath指定ソースファイルパスpackagenamesカンマ区切りパケットファイルリスト(終端ワイルドカード付き)classpathrefは、ユーザークラスパスUse改ページ作成クラスとWindowtitleドキュメントを含むブラウザウィンドウタイトル(テキスト)を参照で指定します。charsetが作成したドキュメントのクロスプラットフォームビューの文字セットEncdingソースファイルコード名docencoding出力ファイルのコード名Versionは@versionタグlinkを含み、所定のURLからドキュメント出力bottomにリンクして作成します。各ページに含まれているボトム記述(httl-code)Docctitleはトップページのバッグにタイトル(httl-code)を含んでいます。JDKは1.4以上必要です。
 
javadocに関する詳細な情報は、javadoc task公式文書を参照してください。
 
5.manifest Jarファイル情報
JavaのJARファイルを開くと、頻繁にファイルにMETA-INFディレクトリが含まれています。このディレクトリにはいくつかのファイルがあります。その中に必ずMANIFEST.MFがあります。このファイルはJarファイルの多くの情報を記述しています。以下、MANIFEST.MFファイルの内容を詳しく紹介します。
<tstamp>
  <format property="TODAY" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>
<manifest file="${deploy.dir}/${name}/META-INF/MANIFEST.MF">
  <attribute name="Built-By" value="${user.name}" />
  <section name="common">
    <attribute name="Specification-Title" value="Springapp example" />
    <attribute name="Specification-Version" value="${version}" />
    <attribute name="Specification-Vendor" value="${organization}" />
    <attribute name="Implementation-Version" 
         value="${jar.name}-${version.num}-b${build.number}" />
    <attribute name="Built-Date" value="${TODAY}" />
  </section>
</manifest>
上のant taskタスクは、まずtstampの時間パターンを定義し、「manifest」でこの定義を参照します。次にいくつかのmaifestの基本情報を定義し、「manifest」タブには以下の属性が定義されます。file作成または更新されたファイルmode(default replace)  「udate」または「replace」の一つで、encoding(defaults UTF-8)  更新時に既存のファイルのコードを読み込みます。タグ属性name属性名は、[A-Za-z 0-9]、[A-Za-z 0-9-_]*.value属性値が埋め込まれています。タグ属性は以下の通りです。  maifestファイルのバージョンCreated-Byを定義します。  このファイルの作成者を宣言します。この属性は、jarコマンドラインツールによってSignature-Versionが生成されます。  jarファイルを定義する署名バージョンClass-Path  アプリケーションまたはクラスローダーは、この値を使用して内部のクラス探索パスMain-Colassを構築し、jarファイルのエントリクラスを定義する。クラスは実行可能なクラスでなければならない。この属性を定義すれば、java-jar x.jarによって、jarファイルImplementation-itleを実行することができる。  拡張実装を定義したタイトルImplementation-Version  拡張実装のバージョンを定義します。  拡張された組織を定義します。  Implemenntation-Vendor-ID  拡張実装された組織の識別Implementation-URLを定義します。  この拡張パッケージのダウンロードアドレス(URL)Specification-itleを定義します。  拡張仕様を定義するタイトルSpecification-Version  拡張仕様を定義するバージョンSpecification-Veendor  この規範を維持する組織Sealedを宣言しました。  jarファイルが保存されているかどうかを定義します。値はtrueまたはfalseとすることができます。
Jar構築時に下記のMANIFEST.MFファイル情報が発生します。
Manifest-Version:1.0 Ant Version:Apache Ant 1.7.0 Created-By:1.5.0_15-b 04(Sun Microsoft tems Inc.)Bilt-By:Janwer Name:common Specification-itle:Springpp example Specification-Version:1.0 Specification-Vendor:Dematch Info Tech.Co.Ltd Implement-Version
 
Manifestに関するより詳細な説明はSUN Mainfestを参照して説明でき、maifestタスクについてはANt maifestを参照して説明することができる。
 
6.sqlタスク
JDBC接続データベースで一連のSQL文を実行することができますし、そのsqlファイルからテキスト文を読み取ることもできます。サポート区切られた複数のステートメントは、ステートメント内の--または/コメントにも対応します。
<sql driver="${db.driver}" url="${db.url}" userid="${db.user}" password="${db.pw}" 
  onerror="continue" src="db/create_products.sql">
  <classpath refid="classpath" />
</sql>
src指定SQLファイルencoding sqlファイルのコードonerror(default abort)がsqlスクリプトを実行できなくなった場合は、続行し、ストップし、中止します。atocomit(default false)はデータベース接続に対して自動的に提出されますか?
 
さらに詳細な情報がある場合はant sql文書を参照してください。
 
7.taskdefタスク定義
主な機能はいくつかのタスクを追加して現在のプロジェクトに定義します。以下にtomcat reloadタスクを定義します。
<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="reload" classname="org.apache.catalina.ant.ReloadTask">
  <classpath refid="catalina-ant-classpath" />
</taskdef>
 <タスク定義フォーマットは、基本的に上記の通りです。ANt文書ではその説明が簡単で、ANt taskdefの公式の説明が見られます。
 
他のものはjar、warなど簡単です。ここでは説明しないでください。ドキュメントを参考に定義してもいいです。添付ファイルに日常的に使う簡単なブリーフィングの定義を与えました。興味があれば見てもいいです。ただし、私の使用環境は(eclipse 3.3+JDK 1.5)ですので、実際の開発環境に応じて変更してください。