JOOQ 错误“找不到元素‘配置’的声明”

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

我正在设置一个基于 Kotlin/Gradle/Spring/JOOQ 的应用程序。当我尝试运行我的代码时(除了通用的

BackendApplication.kts
之外没有其他文件,我收到错误

`> Task :generateJooq
12:01:46 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.kts

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jooq.meta.jaxb.ForcedType
import org.jooq.meta.jaxb.Logging
import org.jooq.meta.jaxb.Property

plugins {
   id("org.springframework.boot") version "3.2.2"
   id("io.spring.dependency-management") version "1.1.4"
   kotlin("jvm") version "1.9.22"
   kotlin("plugin.spring") version "1.9.22"
   id("nu.studer.jooq") version "9.0"
}

group = "com.example"
version = "0.0.1-SNAPSHOT"

java {
   sourceCompatibility = JavaVersion.VERSION_17
}

configurations {
   compileOnly {
      extendsFrom(configurations.annotationProcessor.get())
   }
}

repositories {
   mavenCentral()
}

dependencies {
   implementation("org.springframework.boot:spring-boot-starter-jooq")
   implementation("org.springframework.boot:spring-boot-starter-web")
   implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
   implementation("org.jetbrains.kotlin:kotlin-reflect")
   compileOnly("org.projectlombok:lombok")
   runtimeOnly("org.postgresql:postgresql")
   annotationProcessor("org.projectlombok:lombok")
   testImplementation("org.springframework.boot:spring-boot-starter-test")
   implementation("org.jooq:jooq:3.19.1")
   implementation("org.jooq:jooq-meta:3.19.1")
   implementation("org.jooq:jooq-codegen:3.19.1")
   jooqGenerator("org.postgresql:postgresql:42.5.4")
}

tasks.withType<KotlinCompile> {
   kotlinOptions {
      freeCompilerArgs += "-Xjsr305=strict"
      jvmTarget = "17"
   }
}

tasks.withType<Test> {
   useJUnitPlatform()
}

jooq {
   version.set("3.19.1")  
   edition.set(nu.studer.gradle.jooq.JooqEdition.OSS)  
   configurations {
      create("main") {  
         generateSchemaSourceOnCompilation.set(true)
     jooqConfiguration.apply {
        logging = Logging.WARN
        jdbc.apply {
           driver = "org.postgresql.Driver"
           url = "jdbc:postgresql://localhost:5432/mydb"
           user = "postgres"
           password = "postgres"
           properties.add(Property().apply {
                  key = "ssl"
                  value = "false"
               })
            }
            generator.apply {
               name = "org.jooq.codegen.DefaultGenerator"
               database.apply {
                  name = "org.jooq.meta.postgres.PostgresDatabase"
                  inputSchema = "public"
                  forcedTypes.addAll(listOf(
                     ForcedType().apply {
                        name = "varchar"
                        includeExpression = ".*"
                        includeTypes = "JSONB?"
                     },
                     ForcedType().apply {
                        name = "varchar"
                        includeExpression = ".*"
                        includeTypes = "INET"
                     }
                  ))
               }
               generate.apply {
                  isDeprecated = false
                  isRecords = true
                  isImmutablePojos = true
                  isFluentSetters = true
               }
               target.apply {
                  packageName = "com.example.Server"
                  directory = "build/generated-src/jooq/main"
               }
               strategy.name = "org.jooq.codegen.DefaultGeneratorStrategy"
            }
         }
      }
   }
}

buildscript {
   configurations["classpath"].resolutionStrategy.eachDependency {
      if (requested.group.startsWith("org.jooq") && requested.name.startsWith("jooq")) {
         useVersion("3.19.1")
      }
   }
}

我可以使用上面的凭据在 PGAdmin 中本地登录到我的 Postgres DB,因此据我所知,与不同的 JOOQ 库存在包版本控制冲突。有谁知道我该如何调试这个?

spring postgresql kotlin gradle jooq
1个回答
0
投票

这个第三方gradle插件在升级jOOQ版本时总是遇到同样的问题。您可以在这里找到有关此问题的一些信息:

总之,你似乎已经将

jooq-codegen
升级到了比
jooq-meta
更新的版本,这就是为什么
jooq-codegen
无法从
jooq-meta
中找到最近才引入的方法。

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