Doma 2をGroovyで使用する時に気を付けること
気付いた範囲でまとめてみます。
フォルダ配置
Doma 2はAnnotation ProcessorでDAOの実装クラスを自動生成します。Doma 2のAnnotation ProcessorはJavaのコードにのみ対応しているため、DAOやエンティティはGroovyではなくJavaで書く必要があります。また、GroovyとJavaのコードが互いに参照する場合は両者を /src/main/groovy
に配置する必要があります。
具体的には以下のような配置になります。
src/main/
(4/18追記)エンティティクラスもAnnotation Processorで処理されるため、Javaで書く必要があるようです。
ビルドの設定
GroovyとJavaを /src/main/groovy
に配置した場合、GroovyコンパイラがAnnotation Processorを実行することになるため、以下のように compileGroovy
タスクに対して設定を適用します。
// build.gradle plugins { id 'groovy' } dependencies { compile 'org.seasar.doma:doma:2.16.0' } processResources.destinationDir = compileGroovy.destinationDir compileGroovy.dependsOn processResources
外部ドメインを利用する場合などAnnotation Processorの設定が必要な場合は、Groovyコンパイラに設定を渡します。
compileGroovy.options.compilerArgs = ['-Pdoma.domain.converters=example.framework.data.HelloConverter']
2.16.0からはAnnotation Processorの設定を /src/main/resources/doma.compile.config
に書けます。これにより、ビルドツールやIDEでAnnotation Processorを設定する必要がなくなります。
その他
ドメインクラスは @Immutable
や @Canonical
を使うと扱いやすいです。