将JOOQ与Kotlin Gradle DSL一起使用

发布于 2025-01-27 09:26:11 字数 3345 浏览 2 评论 0原文

我正在尝试使用Kotlin DSL在Gradle中设置JOOQ代码生成,但是当我运行Generator Task时,我正在获得错误“无法实例化的注释类”。我想念什么?

这是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"))))
}

,这是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)

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. What am I missing?

Here's the 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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浊酒尽余欢 2025-02-03 09:26:11

问题是由于班级目标被注释所掩盖。修复程序是添加一个明确的导入:导入org.jooq.meta.jaxb.target

所有这些都归功于@Jorn和@lukas Eder进行修复。

The issue was due to the class Target being shadowed by an annotation. The fix was to add an explicit import: import org.jooq.meta.jaxb.Target

All credit to @Jorn and @Lukas Eder for the fix.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文