アプリケーションのビルド方法

Domaを利用するアプリケーションを、AntもしくはMavenによってビルドする方法を示します。

2011年8月現在、JDK6のjavacにはaptに関するバグがあることが判明しています。 ここでは、このバグの回避を考慮に入れて解説します。

なお、このバグはJDK7のjavacでは解決されています。

バグは、Bug DatabaseにBug ID 6403465として登録されています。 このバグの内容は、一言で言うと、本来はコンパイルエラーでないものがエラーとして報告されるというものです。

回避方法の1つは、誤って報告されるエラーメッセージを単に無視することです。

このバグの現象は、aptにより生成されるJavaコードに依存するコードをjavacの対象にすると起こります(aptにより生成されるJavaコードと依存するコードが異なるパッケージの場合にのみ起きます)。 たとえば、javacは、以下のコードに対し間違ったエラー報告をします(EmployeeDaoImplというクラスがaptにより生成されると前提します)。

javacから出力される間違ったエラー報告とは次のようなものです。

このメッセージが出力されても、実際にはコンパイルは成功しています。

もう1つの回避方法は、aptにより生成されるJavaコードに直接依存するコードを書かないことです。 この方法を利用する場合、aptにより生成されるJavaコードのクラスには実行時にリフレクションを使ってアクセスする必要があります。 この場合、自前でファクトリクラスを作成するか、Seasar2やSpring Frameworkといった汎用的なDIコンテナを活用することを推奨します。

Antでビルドを行うには、あらかじめAntをインストールしてください。 Ant 1.7で動作を確認しています。

Antでビルドを行う際のポイントを示します。

サンプルのビルドファイルを示します。このビルドファイルは、チュートリアルの配布ファイルに含まれるものです。 チュートリアルはダウンロードページからダウンロードできます。

]]>

javacタスク実行時にはjavacのバグによりエラーメッセージが誤って報告されますが、「BUILD SUCCESSFUL」というメッセージとともにAntの実行が終了すれば、ビルドは成功しています。

Antを使ったWebアプリケーションのビルドについては、Doma JPetStoreの配布ファイルに含まれるbuild.xmlを参考にしてください。 Doma JPetStoreはダウンロードページからダウンロードできます。

Mavenでビルドを行うには、あらかじめMavenをインストールしてください。 Maven 3.0.3で動作を確認しています。

Mavenでビルドを行う際のポイントを示します。

サンプルのpom.xmlの抜粋を示します。pom.xmlは、チュートリアルに含まれるものです。 チュートリアルはダウンロードページからダウンロードできます。

org.bsc.maven maven-processor-plugin 2.0.5 process process process-resources ${project.build.directory}/apt_generated false ]]>

failOnErrorにはfalseを指定してください。 javacのバグにより報告されるエラーによって処理を中断しないようにするためです。

この例では使用していませんが、aptにパラメータを渡す場合にはmaven-processor-pluginのcompilerArguments要素を使ってください。

Mavenを使ったWebアプリケーションのビルドについては、Doma JPetStoreの配布ファイルに含まれるpom.xmlを参考にしてください。 Doma JPetStoreはダウンロードページからダウンロードできます。

Gradle 1.6で動作確認しています。

Gradleでビルドを行う際のポイントを示します。

サンプルのbuild.gradleを示します。このファイルはチュートリアルに含まれています。

Java6でビルドする場合は、javacのバグについても参照ください。

Java7以上でビルドする場合は、javacの警告についても参照ください。