我正在设置一个基于 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 库存在包版本控制冲突。有谁知道我该如何调试这个?
这个第三方gradle插件在升级jOOQ版本时总是遇到同样的问题。您可以在这里找到有关此问题的一些信息:
总之,你似乎已经将
jooq-codegen
升级到了比jooq-meta
更新的版本,这就是为什么jooq-codegen
无法从jooq-meta
中找到最近才引入的方法。