JOOQ代码生成给出错误<generator>标签是强制性的

时间:2018-12-06 11:34:29

标签: gradle build.gradle vert.x jooq

我正在尝试将JOOQ与最新版本4.0.0的vertx一起使用。我想通过gradle生成我的Daos和表格。以下是我的build.gradle代码

buildscript {
    ext {
        vertx_jooq_version = '4.0.0'
        postgresql_version = '42.2.2'
    }
    repositories {
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        classpath "io.github.jklingsporn:vertx-jooq-generate:$vertx_jooq_version"
        classpath "org.postgresql:postgresql:$postgresql_version"
    }
}

import groovy.xml.MarkupBuilder
import org.jooq.util.GenerationTool

import javax.xml.bind.JAXB

group 'your group id'
version 'your project version'

apply plugin: 'java'

dependencies {
    compile "io.github.jklingsporn:vertx-jooq-classic:$vertx_jooq_version"
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

task jooqGenerate {
    doLast() {
        def writer = new StringWriter()
        new MarkupBuilder(writer)
                .configuration('xmlns': 'http://www.jooq.org/xsd/jooq-codegen-3.10.0.xsd') {
            jdbc {
                driver('org.postgresql.Driver')
                url('jdbc:postgresql://IP:PORT/DATABASE')
                user('YOUR_USER')
                password('YOUR_PASSWORD')
            }
            generator {
                name('io.github.jklingsporn.vertx.jooq.generate.classic.ClassicJDBCVertxGenerator')
                database {
                    name('org.jooq.meta.postgres.PostgresDatabase')
                    include('.*')
                    excludes('schema_version')
                    inputSchema('public')
                    includeTables(true)
                    includeRoutines(true)
                    includePackages(false)
                    includeUDTs(true)
                    includeSequences(true)
                }
                generate([:]) {
                    deprecated(false)
                    records(false)
                    interfaces(true)
                    fluentSetters(true)
                    pojos(true)
                    daos(true)
                }
                target() {
                    packageName('io.one.sys.db')
                    directory("$projectDir/src/main/java")
                }
                strategy {
                    name('io.github.jklingsporn.vertx.jooq.generate.VertxGeneratorStrategy')
                }
            }
        }
        GenerationTool.generate(
                JAXB.unmarshal(new StringReader(writer.toString()), org.jooq.meta.jaxb.Configuration.class)
        )
    }
}

取自github链接https://github.com/jklingsporn/vertx-jooq/tree/master/vertx-jooq-classic-jdbc

但是当我运行命令./gradlew jooqGenerate生成代码时,它给出了错误: The <generator/> tag is mandatory. For details, see http://www.jooq.org/xsd/jooq-codegen-3.11.0.xsd

我在JOOQ代码源库中检查了org.jooq.codegen.GenerationTool。以下是代码

 org.jooq.meta.jaxb.Generator g = configuration.getGenerator();
            if (g == null)
                throw new GeneratorException("The <generator/> tag is mandatory. For details, see " + Constants.NS_CODEGEN);

链接:https://github.com/jOOQ/jOOQ/blob/master/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java

似乎是configuration.getGenerator()中的问题;

以下是org.jooq.meta.jaxb.Generator文件的链接 https://github.com/jOOQ/jOOQ/blob/master/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Generator.java

我看到以下方法

public Generator withGenerate(Generate value) {
        setGenerate(value);
        return this;
    }

public void setGenerate(Generate value) {
        this.generate = value;
    }

我无法挖掘更多的人,应该调用withGenerate()方法来创建Generator对象。

任何人都可以告诉我这里有什么问题吗,或者jklingsporn库是否有问题

1 个答案:

答案 0 :(得分:2)

最后知道了。 由于xsd版本不同,我不得不将网址http://www.jooq.org/xsd/jooq-codegen-3.10.0.xsd更新为http://www.jooq.org/xsd/jooq-codegen-3.11.0.xsd