【问题标题】:Code generation with jooq and gradle-jooq-plugin (kotlin)使用 jooq 和 gradle-jooq-plugin (kotlin) 生成代码
【发布时间】:2020-07-26 03:31:35
【问题描述】:

我正在尝试将 jooq 与 gradle (kotlin) 一起使用。来源:gradle-jooq-plugin

我从昨天开始就在尝试,现在我没有任何资源可看。

我认为我没有做对,因为我是 kotlin 的新手。但是这些例子对我也不起作用(我知道插件的解释很好,例子很简单..)

如果你们中的任何人能指出我做错的地方,我非常感激,因为我不仅仅是好奇。

以下是我的build.gradle 文件的 sn-p。我正在使用 Junit 5 进行测试(如果它会产生任何影响,我猜不会

import nu.studer.gradle.jooq.JooqEdition

plugins {
    java
    jacoco // test coverage and reports
    id("org.springframework.boot") version "2.2.6.RELEASE"
    id("org.sonarqube") version "2.8"
    id("nu.studer.jooq") version "4.1"
    id("java-library")
    `kotlin-dsl`
}

apply(plugin = "io.spring.dependency-management")
apply(plugin = "nu.studer.jooq")

dependencies {
    apply(plugin = "nu.studer.jooq")

    // ### Spring ###
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-jdbc")
    implementation("org.springframework.boot:spring-boot-starter-jooq")
    compileOnly("org.springframework.boot:spring-boot-starter-actuator")


    // ### Database ###
    implementation("org.postgresql:postgresql:42.2.11")
    implementation("org.liquibase:liquibase-core:3.8.8")
    implementation("org.jooq:jooq")
    jooqRuntime("postgresql:postgresql:9.1-901.jdbc4")

}

ext {
    jooq.version = "3.12.3"
}

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}


jooq {
    version = "3.12.3"
    edition = JooqEdition.OSS

    "sample"(sourceSets["main"]) {

    }
}

我的问题

"sample"(sourceSets["main"]) 来自here。一个 gradle (kotlin) 示例。但我收到以下错误:

Expression '"sample"' of type 'String' cannot be invoked as a function. The function 'invoke()' is not found

【问题讨论】:

    标签: kotlin gradle jooq codegen


    【解决方案1】:

    在您的 jooq 配置中,您使用的示例函数设置为 string 而不是函数。

    在此处查看文档:https://github.com/etiennestuder/gradle-jooq-plugin

    你应该有这个:

    jooq {
      version = '3.12.3'
      edition = 'OSS'
      generateSchemaSourceOnCompilation = true
      sample(sourceSets.main) {
        jdbc {
          driver = 'org.postgresql.Driver'
          url = 'jdbc:postgresql://localhost:5432/sample'
          user = 'some_user'
          password = 'secret'
          properties {
            property {
              key = 'ssl'
              value = 'true'
            }
          }
        }
        generator {
          name = 'org.jooq.codegen.DefaultGenerator'
          strategy {
            name = 'org.jooq.codegen.DefaultGeneratorStrategy'
            // ...
          }
          database {
            name = 'org.jooq.meta.postgres.PostgresDatabase'
            inputSchema = 'public'
            forcedTypes {
              forcedType {
                name = 'varchar'
                expression = '.*'
                types = 'JSONB?'
              }
              forcedType {
                name = 'varchar'
                expression = '.*'
                types = 'INET'
              }
            }
            // ...
          }
          generate {
            relations = true
            deprecated = false
            records = true
            immutablePojos = true
            fluentSetters = true
            // ...
          }
          target {
            packageName = 'nu.studer.sample'
            // directory = ...
          }
        }
      }
    }
    

    顺便说一句,要让 Jooq 生成您的代码,您必须为其提供数据库的连接字符串。

    【讨论】:

    • 感谢您的回答。首先,我知道数据库连接必须在那里。但我忽略了它,因为上面的部分不起作用。我认为你的例子很时髦,但我使用的是 kotlin。对于 kotlin,有一个 example 我试过不带引号,但后来我收到一条错误消息 unresolved reference: sample
    • @anjey,对不起。您能否在这里查看github.com/etiennestuder/gradle-jooq-plugin/tree/master/example/…,您还有另一个 Kotlin 示例。它也通过调用apply 使用sample。 Gradle 是 groovy 代码,所以我仍然不明白为什么你必须在那里使用 Kotlin,无论如何我认为它应该通过那个例子工作。另外,你查github.com/rohanprabhu/kotlin-dsl-gradle-jooq-plugin了吗?
    • 谢谢,我拿了第一个链接。至少现在正在发生一些事情。仍然是一个旁注。我想要一个在 kotlin dsl 中的 clean 版本,而不是将它与 groovy 混合。就良好实践而言,这可能不是那么重要吗?无论如何感谢您的解决方案!
    • @anjey 我同意,自从我找到一个 kotlin dsk gradle jooq 插件以来,我已经编辑了我之前的评论。你可以看看它,它可能是你喜欢的。
    • 我会调查的,谢谢。正如我所猜测的,kotlin dsl 插件存在问题。 github.com/etiennestuder/gradle-jooq-plugin/issues/120 。任何有兴趣的人都可以在链接中找到解决方法。
    猜你喜欢
    • 2016-02-19
    • 2019-06-22
    • 2020-01-23
    • 2014-03-06
    • 2018-02-10
    • 2016-06-12
    • 2014-09-09
    • 2017-12-03
    • 2017-08-13
    相关资源
    最近更新 更多