我希望jOOQ自动代码生成器基于resources文件夹中的liquibaseschema 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中,LiquibaseDatabase
、DDLDatabase
和JPADatabase
都使用内存中的H2数据库模拟数据库迁移。这在未来可能会改变,但现在就是这样。在H2中,默认情况下,所有标识符都是大写,<inputSchema/>
配置也是如此。这意味着您应该包括PUBLIC
模式,而不是public
模式。
请注意,代码生成输出将包含对PUBLIC
的引用,而不是对public
的引用,因此,如果要继续使用LiquibaseDatabase
,则必须在运行时使用RenderQuotedNames
设置关闭对标识符的引用。
不在H2上模拟Liquibase的更稳健的替代方案
或者,您不必使用LiquibaseDatabase
,正如我在其他地方提到的那样。您还可以使用testcontainers直接在PostgreSQL上运行实际的迁移,并对实际的PostgreSQL数据库进行反向工程,如本文所述。