From 091a65b283c2326acebda3a21d444aa248b22481 Mon Sep 17 00:00:00 2001 From: Andreas Motl Date: Fri, 20 Jan 2023 17:25:06 +0100 Subject: [PATCH] Java/jOOQ: Add jOOQ code generation add-on for Gradle --- by-language/java-jooq/README.rst | 9 ++- by-language/java-jooq/build.gradle | 3 + by-language/java-jooq/jooq.gradle | 89 ++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 5 deletions(-) create mode 100644 by-language/java-jooq/jooq.gradle diff --git a/by-language/java-jooq/README.rst b/by-language/java-jooq/README.rst index c39e5b61..628cd431 100644 --- a/by-language/java-jooq/README.rst +++ b/by-language/java-jooq/README.rst @@ -46,11 +46,6 @@ builder without code generation`_. Caveats ======= -- `jOOQ's code generator`_ takes your database schema and reverse-engineers it - into a set of Java classes. This feature currently does not work with CrateDB - yet. The code provided within the ``src/generated`` directory has not been - derived by reflecting the database schema from CrateDB. - - Most of the jOOQ examples use uppercase letters for the database, table, and field names. CrateDB currently only handles lowercase letters. @@ -73,6 +68,10 @@ Usage ./gradlew test +4. Generate the jOOQ sources from the main jOOQ configuration, see ``jooq.gradle``:: + + ./gradlew generateJooq + .. _CrateDB: https://github.com/crate/crate .. _Different use cases for jOOQ: https://www.jooq.org/doc/latest/manual/getting-started/use-cases/ diff --git a/by-language/java-jooq/build.gradle b/by-language/java-jooq/build.gradle index cb17902b..871a3b55 100644 --- a/by-language/java-jooq/build.gradle +++ b/by-language/java-jooq/build.gradle @@ -56,6 +56,9 @@ test { dependsOn 'cleanTest' } +// Activate jOOQ code generation add-on. +apply from: 'jooq.gradle' + idea.module.inheritOutputDirs = true processResources.destinationDir = compileJava.destinationDir compileJava.dependsOn processResources diff --git a/by-language/java-jooq/jooq.gradle b/by-language/java-jooq/jooq.gradle new file mode 100644 index 00000000..18383ce3 --- /dev/null +++ b/by-language/java-jooq/jooq.gradle @@ -0,0 +1,89 @@ +/** + * About + * ===== + * + * Configure `gradle-jooq-plugin`, a Gradle plugin that integrates the jOOQ + * code generation tool. This layout manages the jOOQ configuration within + * a separate script file. + * + * Synopsis + * ======== + * + * ./gradlew generateJooq + * + * Resources + * ========= + * + * - https://github.com/etiennestuder/gradle-jooq-plugin#gradle-groovy-dsl-4 + * - https://github.com/etiennestuder/gradle-jooq-plugin/tree/main/example/extract_script_file + * - https://github.com/etiennestuder/gradle-jooq-plugin#examples + */ + +buildscript { + repositories { + gradlePluginPortal() + } + dependencies { + classpath 'nu.studer:gradle-jooq-plugin:8.1' + } +} + +repositories { + mavenCentral() +} + +apply plugin: nu.studer.gradle.jooq.JooqPlugin + +dependencies { + jooqGenerator 'org.postgresql:postgresql:42.5.1' +} + +jooq { + + // Defaults (can be omitted). + // version = '3.17.6' + // edition = nu.studer.gradle.jooq.JooqEdition.OSS + + configurations { + // Name of the jOOQ configuration. + main { + + // Do not *automatically* generate code. + generateSchemaSourceOnCompilation = false + + generationTool { + logging = org.jooq.meta.jaxb.Logging.WARN + jdbc { + driver = 'org.postgresql.Driver' + url = 'jdbc:postgresql://localhost:5432/testdrive' + user = 'crate' + password = '' + properties { + property { + key = 'PAGE_SIZE' + value = 2048 + } + } + } + generator { + name = 'org.jooq.codegen.DefaultGenerator' + database { + name = 'org.jooq.meta.postgres.PostgresDatabase' + inputSchema = 'testdrive' + } + generate { + deprecated = false + records = false + immutablePojos = false + fluentSetters = false + } + target { + packageName = 'io.crate.demo.jooq.model' + directory = 'src/generated/java' + } + strategy.name = "org.jooq.codegen.DefaultGeneratorStrategy" + } + } + } + } +}