通过Gradle使用Jooq代码生成

问题描述 投票:3回答:2

我正在阅读本教程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文件中?抱歉,这个问题太基本了。

gradle jooq
2个回答
2
投票

您可以例如添加将定义如下的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)
  )
}

0
投票

@@ Opal的答案经过一些调整,效果很好(谢谢!)。我以为我愿意与他人共享jOOQ和Gradle的较新版本。

更改:

  1. <<从第一行删除,并添加doLast
  2. jOOQ .xsd已更新至3.9.2
  3. org.jooq.util.GenerationTool.generate(writer.toString())生成代码
    task generate {
        doLast {
            def writer = new StringWriter()
            def xml = new groovy.xml.MarkupBuilder(writer)
                    .configuration('xmlns': 'http://www.jooq.org/xsd/jooq-codegen-3.9.2.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(writer.toString())
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.