jOOQ の Scala コードの Code Generation を Gradle で

2018/04/04   #jOOQ  #Scala  #Gradle 
このエントリーをはてなブックマークに追加

そんな需要があるのかはさておきやってみたので。

環境

Java 10 でやってみたので、JAXB などをクラスパスに加えたりそういうのをしてたりする。
Java 8 だと不要な記述があるかも。

データベースは H2 データベース。
'jdbc:h2:mem:;INIT=runscript from \'src/main/resources/db/migration/V1__emp.sql\''
で、初期 DDL ( src/main/resources/db/migration/V1__emp.sql ) を流してテーブルをつくっている。

やり方

[build.gradle]

import groovy.xml.MarkupBuilder
import org.jooq.util.GenerationTool
import javax.xml.bind.JAXB

:

buildscript {
    :
    dependencies {
        classpath "org.jooq:jooq-codegen:3.10.6"
        classpath 'com.h2database:h2:1.4.177'
        classpath 'org.glassfish.jaxb:jaxb-runtime:2.3.0'
        classpath group: 'com.sun.xml.bind', name: 'jaxb-impl', version: '2.3.0'
        classpath group: 'javax.activation', name: 'activation', version: '1.1.1'
    }
}



dependencies {
    :
    compile group: 'org.jooq', name: 'jooq', version: '3.10.6'
    compile group: 'org.jooq', name: 'jooq-meta', version: '3.10.6'
    compile group: 'org.jooq', name: 'jooq-codegen', version: '3.10.6'
    compile group: 'org.jooq', name: 'jooq-scala_2.12', version: '3.10.6'
}

:

def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
        .configuration('xmlns': 'http://www.jooq.org/xsd/jooq-codegen-3.10.0.xsd') {
    jdbc() {
        driver('org.h2.Driver')
        url('jdbc:h2:mem:;INIT=runscript from \'src/main/resources/db/migration/V1__emp.sql\'')
        user('sa')
        password('')
    }
    generator() {
        name('org.jooq.util.ScalaGenerator')
        database() {
            name('org.jooq.util.h2.H2Database')
            inputSchema('PUBLIC')
            includes('.*')
            excludes('')
        }
        generate([:]) {
            immutablePojos true
            validationAnnotations true
            fluentSetters true
        }
        target() {
            packageName('foo.bar.baz.springbootscala.dao')
            directory('src/main/scala')
        }
    }
}

task generateJOOQ {
    GenerationTool.generate(
        JAXB.unmarshal(new StringReader(writer.toString()), org.jooq.util.jaxb.Configuration.class)
    )
}

で、以下のコマンドを叩く。

$ ./gradlew generateJOOQ

src/main/scala ディレクトリの jp.co.atware.springbootscala.dao パッケージにコード生成される。
generator - nameorg.jooq.util.ScalaGenerator を指定しているので、Scala コードで生成される。