読者です 読者をやめる 読者になる 読者になる

GradleでDomaアプリをビルド

Gradleも1.0がリリースされたということで、GradleでDomaアプリをビルドするという課題が与えられました(誰にだ)。Domaはpluggable annotation processing api(APTとも呼ばれる)を使っており、ビルド設定が鬼門だったりするので。

DomaのチュートリアルのGradle化です。
で、build.gradle

apply plugin: 'java'

sourceCompatibility = targetCompatibility = 1.6
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
processResources.destinationDir = compileJava.destinationDir
compileJava.dependsOn processResources

def aptGeneratePath = 'build/apt_generated'
compileJava.options.compilerArgs = ['-s', aptGeneratePath]
compileJava.doFirst { file(aptGeneratePath).mkdirs() }

repositories {
  mavenCentral()
  maven {url 'http://maven.seasar.org/maven2'}
}

dependencies {
  compile group: 'org.seasar.doma', name: 'doma', version: '1.22.0'
  compile group: 'com.h2database', name: 'h2', version: '1.2.126'
  testCompile group: 'junit', name: 'junit', version: '3.8.2'
}

ポイントは、Domaはコンパイル時にSQLファイルの正常性をチェックするので、コンパイルの前にSQLファイルをコピーしなくてはいけない。以下で、デフォルトの依存関係を逆にします。

compileJava.dependsOn processResources

それと、クラスファイルとSQLファイルは、同じclasses配下に出力される必要もあるんで、以下のように同じにしちゃいました。

processResources.destinationDir = compileJava.destinationDir

mavenは、XMLのタグ属性を使わないので記述がどうしても長くなりますよね。ant+Ivyより長くなったり。それに比べ、Gradleは短いですよね。小回りも効きそうだし。


以上です。

ところで、Domaのチュートリアルでtutorial.dao.CustomEmployeeDaoって要らないクラスじゃないですか? |ω・`)チラ

(2013/07/16追記)
apt_generatedのディレクトリ作成をcompileJavaタスクの最初にのみ動くように変更しました。