JOOQ kotlin gradle 配置不起作用

问题描述 投票:0回答:1

我正在将 Spring Boot 与 kotlin 一起使用,将 gradle 与 groovy dsl 一起使用。在配置 JOOQ 时,我遇到了一个问题,每次我尝试运行 codegen 时都会出现此异常。

我一次又一次地遇到同样的错误:

    23:31:53 WARNING org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 127; cvc-elt.1.a: Cannot find the declaration of element 'configuration'.

    Exception in thread "main" java.lang.NoSuchMethodError: 'java.lang.String org.jooq.meta.jaxb.Generator.getJava()'
    at org.jooq.codegen.GenerationTool.run0(GenerationTool.java:396)
    at org.jooq.codegen.GenerationTool.run(GenerationTool.java:246)
    at org.jooq.codegen.GenerationTool.generate(GenerationTool.java:241)
    at org.jooq.codegen.GenerationTool.main(GenerationTool.java:213)

这是我在build.gradle中的配置:

jooq {
    edition = nu.studer.gradle.jooq.JooqEdition.OSS
    configurations {
        main {  // name of the jOOQ configuration
            generateSchemaSourceOnCompilation = false  // default (can be omitted)

            generationTool {
                logging = Logging.WARN
                jdbc {
                    driver = 'org.postgresql.Driver'
                    url = 'jdbc:postgresql://localhost:5432/postgres'
                    user = 'postgres'
                    password = 'postgres'
                }
                generator {
                    name = 'org.jooq.codegen.KotlinGenerator'
                    database {
                        name = 'org.jooq.meta.postgres.PostgresDatabase'
                        inputSchema = 'public'
                        forcedTypes {
                            forcedType {
                                name = 'varchar'
                                includeExpression = '.*'
                                includeTypes = 'JSONB?'
                            }
                            forcedType {
                                name = 'varchar'
                                includeExpression = '.*'
                                includeTypes = 'INET'
                            }
                        }
                    }
                    generate {
                        deprecated = false
                        kotlinSetterJvmNameAnnotationsOnIsPrefix = true
                        pojosAsKotlinDataClasses = true
                        fluentSetters = true
                    }
                    target {
                        packageName = 'com.encryptora.vpn.infrastructure.database.jooq'
                        directory = 'generated-src/main/jooq'
                    }
                }
            }
        }
    }
}

另外,我可以以某种方式从 application.yml 获取数据库属性,而不是在此处复制它们吗?

spring kotlin jooq
1个回答
0
投票

特定的异常暗示

jooq-codegen
的版本比
jooq-meta
更新。 IE。
jooq-codegen
期望有一个方法
org.jooq.meta.jaxb.Generator.getJava()
,该方法是在jOOQ 3.19中添加的。相关变化是:

  • #15209:支持代码生成器中程序化 GeneratorStrategy 对象的临时编译
  • #15213:支持代码生成器中编程生成器或数据库对象的临时编译

但是您的代码生成类路径上可能有旧版本的

jooq-meta
,其中不包含此特定方法(以及许多其他方法)。

我不知道为什么您正在使用的第三方 gradle 插件会发生这种情况,但解决方案似乎是显式指定所有依赖项及其要对齐的版本。

© www.soinside.com 2019 - 2024. All rights reserved.