I want jOOQ auto-code generator to run on basis of liquibase schema xml file located in resources folder (not on basis of database connection). The configuration part looks like this in 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>
It is not able to generate jOOQ code in the specified folder, says
[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]}
Please guide.
                        
This is most likely due to a bug: https://github.com/jOOQ/jOOQ/issues/12997
Explanation and workaround
Behind the scenes, in jOOQ 3.16, the
LiquibaseDatabase,DDLDatabase, andJPADatabaseall simulate your database migrations using an in-memory H2 database. This might be changed in the future, but that's how it works now. In H2, by default, all identifiers are in upper case, and so is the<inputSchema/>configuration. This means you should be including thePUBLICschema, not thepublicschema.Note that also code generation output will contain references to
PUBLIC, notpublic, so if you want to continue using theLiquibaseDatabase, you'll have to turn off quoting of identifiers at runtime using theRenderQuotedNamessetting.More robust alternative that doesn't simulate Liquibase on H2
Alternatively, you don't have to use the
LiquibaseDatabase, as I've mentioned elsewhere. You can also use testcontainers to run an actual migration directly on PostgreSQL, and reverse engineer an actual PostgreSQL database, instead, as described in this blog post.