如何根据 liquibase 模式 xml 文件将 jOOQ 自动生成器配置为 运行?

How to configure jOOQ auto generator to run on basis of liquibase schema xml file?

我希望 jOOQ 自动代码生成器 运行 基于位于资源文件夹中的 liquibase 模式 xml 文件(而不是基于数据库连接)。配置部分在 pom.xml:

中看起来像这样
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.13.4.xsd">
    <generator>
        <database>
            <name>org.jooq.meta.extensions.liquibase.LiquibaseDatabase</name>
            <includes>.*</includes>
            <excludes></excludes>
            <inputSchema>public</inputSchema>

            <properties>
                <property>
                    <key>scripts</key>
                    <value>/liquibase-outputChangeLog.xml</value>
                </property>

                <property>
                    <key>includeLiquibaseTables</key>
                    <value>true</value>
                </property>

                <property>
                    <key>database.liquibaseSchemaName</key>
                    <value>public</value>
                </property>
            </properties>
        </database>

        <target>
            <packageName>jooqGenerated</packageName>
            <directory>target/generated-sources/jooq</directory>
        </target>
    </generator>
</configuration>

无法在指定文件夹中生成 jOOQ 代码,说

[ERROR] azure/postgresql/TrackerAzureImpl.java: package ...tables does not exist (for all the tables, I cannot even see elsewhere where jooq code is getting generated),
Also one warning: No schemata were loaded: [WARNING] No schemata were loaded  : Please check your connection settings, and whether your database (and your database version!) is really supported by jOOQ. Also, check the case-sensitivity in your configured <inputSchema/> elements : {=[public]}

请指导。

这很可能是由于错误:https://github.com/jOOQ/jOOQ/issues/12997

解释和解决方法

在幕后,在 jOOQ 3.16 中,LiquibaseDatabaseDDLDatabaseJPADatabase 都使用 in-memory H2 数据库模拟您的数据库迁移。将来可能会更改,但这就是现在的工作方式。在 H2 中,默认情况下,所有标识符都是大写的,<inputSchema/> 配置也是如此。这意味着您应该包括 PUBLIC 架构,而不是 public 架构。

请注意,代码生成输出也将包含对 PUBLIC 的引用,而不是 public,因此如果您想继续使用 LiquibaseDatabase,则必须关闭引用运行 时使用 RenderQuotedNames setting.

的标识符

不在 H2 上模拟 Liquibase 的更强大的替代方案

或者,您 不必 使用 LiquibaseDatabase,正如我在别处提到的那样。您还可以使用 testcontainers 运行 直接在 PostgreSQL 上进行实际迁移,并对实际的 PostgreSQL 数据库进行反向工程,而不是 as described in this blog post.