gradle - 如何在 Gradle 中使用 jOOQ 代码生成?

标签 gradle jooq

我正在阅读本教程 jOOQ
它向我展示了如何从 Gradle 内部使用 jOOQ 代码生成。
基于本教程,我修改了我的 build.gradle文件,它看起来像这样:

group 'com.abhi'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'org.flywaydb.flyway'

sourceCompatibility = 1.8

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.flywaydb:flyway-gradle-plugin:3.2.1'
        classpath 'org.jooq:jooq-codegen:3.7.1'
        classpath 'com.h2database:h2:1.4.177'
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.jooq', name: 'jooq', version: '3.7.1'
    compile group: 'org.jooq', name: 'jooq-meta', version: '3.7.1'
    compile group: 'org.jooq', name: 'jooq-codegen', version: '3.7.1'
    runtime group: 'com.h2database', name: 'h2', version: '1.4.177'
}

flyway {
    url = 'jdbc:h2:file:target/foobar'
    user = 'sa'
}
但我无法理解的部分是教程还提供了一些代码:
def writer = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(writer)
.configuration('xmlns': 'http://www.jooq.org/xsd/jooq-codegen-3.7.0.xsd') {
    jdbc() {
        driver('org.h2.Driver')
        url('jdbc:h2:~/test-gradle')
        user('sa')
        password('')
    }
    generator() {
        database() {
        }
        generate() {
        }
        target() {
            packageName('org.jooq.example.gradle.db')
            directory('src/main/java')
        }
    }
}

// Run the code generator
// ----------------------
org.jooq.util.GenerationTool.generate(
    javax.xml.bind.JAXB.unmarshal(new StringReader(writer.toString()), org.jooq.util.jaxb.Configuration.class)
)
我应该把这段代码放在哪里,我应该如何执行它?
这段代码看起来像 Groovy 代码,但我正在编写一个 Java 项目。那么这如何以及在哪里适合我的项目?
我的目标是每次构建项目时,所有代码生成都由 Gradle 自己完成,这样我就不必手动运行任何工具。
这是否意味着我将此代码复制并粘贴到我的 build.gradle 中?文件?

最佳答案

你可以例如添加 generate将定义如下的任务:

task generate << {
  def writer = new StringWriter()
  def xml = new groovy.xml.MarkupBuilder(writer)
  .configuration('xmlns': 'http://www.jooq.org/xsd/jooq-codegen-3.7.0.xsd') {
      jdbc() {
          driver('org.h2.Driver')
          url('jdbc:h2:~/test-gradle')
          user('sa')
          password('')
      }
      generator() {
          database() {
          }
          generate() {
          }
          target() {
              packageName('org.jooq.example.gradle.db')
              directory('src/main/java')
          }
      }
  }

  org.jooq.util.GenerationTool.generate(
      javax.xml.bind.JAXB.unmarshal(new StringReader(writer.toString()), org.jooq.util.jaxb.Configuration.class)
  )
}

关于gradle - 如何在 Gradle 中使用 jOOQ 代码生成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33772043/

相关文章:

java - 在 jOOQ 的 SQL 查询中结合普通 SQL 和 DSL

java - 使用 JOOQ 在 "not in"子句中指定多个列进行删除

带有 Gradle 的 POM 中缺少 Android 库依赖项

gradle - gradle-从关系中的依赖项目建立耳朵

spring - 如何在您的配置中修复 "Consider defining a bean of type ' org.jooq.DSLContext'。”更新到 jOOQ 3.15.0 后

java - jooq 从 sql 文件插入

java - 绕过 Jooq 乐观锁定和 DefaultRecordListener 的某些方法

c++ - 如何使用 Gradle 的 cpp-library 和 cpp-application 插件指定自定义 GCC/G++ 编译器位置?

java - 无法使用 libGDX 设置 android 项目

gradle - 未知主机 'downloads.gradle.org'在Android Studio中创建新项目时