[英]Using JOOQ with Kotlin Gradle DSL
I am trying to set up JOOQ code generation in Gradle using the Kotlin DSL, but am getting the error "Annotation class cannot be instantiated" when I run the generator task.我正在尝试使用 Kotlin DSL 在 Gradle 中设置 JOOQ 代码生成,但是当我运行生成器任务时出现错误“无法实例化注释类”。 What am I missing?我错过了什么?
Here's the build.gradle.kts这是 build.gradle.kts
import org.jooq.meta.jaxb.*
import org.jooq.codegen.GenerationTool
plugins {
id("java")
id("java-library")
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.jooq:jooq-codegen:3.16.6")
classpath("org.postgresql:postgresql:42.3.5")
}
}
repositories {
google()
mavenCentral()
}
dependencies {
compileOnly("org.jooq:jooq:3.16.6")
compileOnly("org.jooq:jooq-codegen:3.16.6")
runtimeOnly("org.postgresql:postgresql:42.3.5")
}
group = "com.example"
version = "1.0-SNAPSHOT"
// Set the following system properties to enable JOOQ to connect to the DB
// -Djooq.codegen.jdbc.user
// -Djooq.codegen.jdbc.password
//
tasks.create("generate") {
GenerationTool.generate(Configuration()
.withJdbc(Jdbc()
.withDriver("org.postgresql.Driver")
.withUrl("jdbc:postgresql://localhost:5432/postgres"))
.withGenerator(Generator()
.withDatabase(Database().withInputSchema("public"))
.withGenerate(Generate())
.withTarget(Target()
.withPackageName("com.example.db")
.withDirectory("src/generated/jooq"))))
}
And here is the stacktrace:这是堆栈跟踪:
ScriptCompilationException(errors=[ScriptCompilationError(message=Annotation class cannot be instantiated, location=/Users/foo/.gradle/.tmp/gradle-kotlin-dsl-12544449971161496170.tmp/build.gradle.kts (51:33)), ScriptCompilationError(message=Unresolved reference: withPackageName, location=/Users/foo/.gradle/.tmp/gradle-kotlin-dsl-12544449971161496170.tmp/build.gradle.kts (52:30))])
at org.gradle.kotlin.dsl.support.KotlinCompilerKt.compileKotlinScriptModuleTo(KotlinCompiler.kt:187)
at org.gradle.kotlin.dsl.support.KotlinCompilerKt.compileKotlinScriptToDirectory(KotlinCompiler.kt:148)
at org.gradle.kotlin.dsl.execution.ResidualProgramCompiler$compileScript$1.invoke(ResidualProgramCompiler.kt:708)
[snipped 100+ lines]
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
The issue was due to the class Target being shadowed by an annotation.问题是由于类 Target 被注释遮蔽。 The fix was to add an explicit import: import org.jooq.meta.jaxb.Target
解决方法是添加显式导入: import org.jooq.meta.jaxb.Target
All credit to @Jorn and @Lukas Eder for the fix.所有功劳归功于@Jorn 和@Lukas Eder 的修复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.