Antでjavadoc

antでjavadoc

Eclipse3.5は標準でantが使えるようです。antでビルド方法を設定することによって、バッチ処理みたいなことができます。今回はjavadocを生成してくれるビルドファイルを作ってみました。

使い方

下記のソースをbuild.xmlという名前で保存し、Eclipseの各プロジェクトの直下に置きます。この例の場合HelloJavaというプロジェクトを作成し、そのプロジェクトの直下にbuild.xmlというファイルを置いています。次にprojectタグのname属性を自分のプロジェクト名に変更します。上の操作ができたら、build.xmlに蟻のマークがついているはず。これでもう実行できるのだけれど、その前に以下の操作を行います。これをやらないとおそらくエラーが出ます。

  1. build.xmlを右クリック
  2. Run As(実行)
  3. External Tools Configurations(外部ツールの設定)
  4. JREの項目を選択
  5. Run in the same JRE as workspace(ワークスペースと同じJREで実行)にチェックを入れる
  6. 最後にRun(実行)

上記の操作でjavadocが生成されたはずです。一度設定をしてしまえば次からはすぐに使えます。

  1. build.xmlを右クリック
  2. Run As(実行)
  3. build.xmlを選択

ソース

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="javadoc" name="HelloJava">
	<target name="delete_javadoc">
		<delete dir="./javadoc" />
		<echo>deleting javadoc...</echo>
		<eclipse.refreshLocal resource="${ant.project.name}" depth="infinite" />
	</target>

	<target name="javadoc" depends="delete_javadoc">
		<echo>making javadoc...</echo>	
		<javadoc windowtitle="${ant.project.name} javadoc" destdir="./javadoc" encoding="utf-8">
			<package name="*" />
			<sourcepath path="./src" />
			<link href="http://java.sun.com/javase/ja/6/docs/ja/api/" />
		</javadoc>
		<eclipse.refreshLocal resource="${ant.project.name}" depth="infinite" />
	</target>
</project>

ポイント

出力する前に既存のjavadocを削除

前に作ったjavadocが残っていては、きちんとjavadocが生成されたのか分からないので、前もってjavadocを削除しています。具体的にいうと、javadocというフォルダを削除しています。もしこのフォルダを別の目的で利用されている方は削除されちゃうので注意してください。

次にここで実際にjavadocを作成します。dependsでdelete_javadocとなっているのは、先にjavadocを削除する処理を入れるという意味です。

Eclipseをリフレッシュ

Eclipseから直接生成したファイルはEclipseのパッケージエクスプローラ上に表示されますが、今回のように外部ツール(ant)を使って作成したファイルはリフレッシュしないと見ることができません。そのためjavadocを生成した後にEclipseをリフレッシュする設定を入れています。

その他

  • projectタグ
  • javadocタグの属性
    • 出力先をjavadocというフォルダに
  • javadocタグの要素
    • packageで読み込むパッケージを指定
      • 今回の場合はプロジェクト内の全てのパッケージを選択している
    • sourcepathで読み込むパスを指定
    • linkで外部のjavadocと連携。例えば全てのクラスはObjectクラスを継承しているわけだが、外部のjavadoc(http://java.sun.com/javase/ja/6/docs/ja/api/)を使ってObjectクラスへのリンク張っている。