当前位置: 首页 > 知识库问答 >
问题:

JOOQ代码生成,给出错误

桂玉石
2023-03-14

我正在尝试将JOOQ与最新版本4.0.0的vertx一起使用。我想通过gradle生成我的DAO和表。以下是我的版本。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

但是当我运行commmand时/gradlew jooqGenerate要生成代码,它给出了错误:

我在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的链接。生成器文件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()方法来创建生成器对象了。

谁能告诉我这里出了什么问题,或者jklingsporn图书馆有什么问题吗


共有1个答案

戚星腾
2023-03-14

终于找到了。我必须更新urlhttp://www.jooq.org/xsd/jooq-codegen-3.10.0.xsd到http://www.jooq.org/xsd/jooq-codegen-3.11.0.xsd因为xsd有不同的版本

 类似资料:
  • 我更改了数据库中的一些表,所以我想生成记录、键、类等。但是每次我这样做时,它总是跳过jooq代码生成。 [INFO]--jooq-codegen-maven:3.11.10:generate(默认cli)@http网关--[INFO]跳过jooq代码生成 为了运行Jooq代码生成,我应该执行哪个mvn cmd?现在我使用: 谢谢

  • 我使用jOOQ程序代码生成数据库,但现在我遇到了一些问题。在数据库中,我有表A和表B。第一次都生成了pojo、dao、接口等。经过一段时间的开发,我发现表A需要添加一些字段或修改一些字段,所以我不得不再次编码,然后jOOQ代码生成器将覆盖现有的代码,这让我很难过。当我在排除表的情况下使用“排除A”时,发现只生成了表A的数据,表B将被删除。我不知道如何处理这个问题。我的代码生成器如下:

  • 是否有任何参数可以在jooq代码生成期间打开/关闭下一个查询的执行? 在有大量模式和对象的数据库上,执行大约需要一个小时

  • 我目前正在评估Jooq。我们在创建join语句时遇到了一些问题,如下所示: 但这并不奏效。我仍然有以为类型的字段。那么除了更改表列类型之外,我还能做些什么呢?

  • 我试图使用JOOQ连接到HSQLDB,但我失败了,这里是错误消息: 此查询也会在HSQLDB Manager上失败(与JOOQ代码生成器的错误相同): 此查询工作正常: 我认为问题出在“cc”限定符上(在查询返回的“CONSTRAINT_NAME”字段上),这是HSQLDB错误吗? 我正在使用: HSQLDB 2.3.1 JOOQ 3.2.3 谢谢Ciccio

  • 当使用jOOQ的代码生成器时,它会拆分嵌套类以防止大型静态初始化器,而可能包含嵌套类,例如,... 我使用带有<代码> 但使用<代码> 这是jOOQ生成器中的错误吗?或者我需要添加其他配置