liquibaseDiffChangelog gradle 任务因 java.lang.UnsupportedOperationException 出错:应用程序必须提供 JDBC 连接

liquibaseDiffChangelog gradle task erring out with java.lang.UnsupportedOperationException: The application must supply JDBC connections

我正在尝试为 spring 带有嵌入式 postgressql 后端(基于磁盘)的启动微服务生成 liquibase 更改日志。下面的命令

./gradlew -PexcludeLog4j=true liquibaseDiffChangelog -PrunList=diffLog -PliquibaseTimestamp=1620929423 -Purl="jdbc:h2:mem:~/workspace/test/testms/build/h2db"

总是犯错

java.lang.UnsupportedOperationException: The application must supply JDBC connections at org.hibernate.engine.jdbc.connections.internal.UserSuppliedConnectionProviderImpl.getConnection(UserSuppliedConnectionProviderImpl.java:44) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:176) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) at liquibase.ext.hibernate.database.HibernateEjb3Database.buildMetadataFromPath(HibernateEjb3Database.java:59) at liquibase.ext.hibernate.database.HibernateDatabase.buildMetadata(HibernateDatabase.java:143) at liquibase.ext.hibernate.database.HibernateDatabase.setConnection(HibernateDatabase.java:83) at liquibase.database.DatabaseFactory.findCorrectDatabaseImplementation(DatabaseFactory.java:121) at liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:141) at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:96) at liquibase.integration.commandline.Main.createReferenceDatabaseFromCommandParams(Main.java:2107) at liquibase.integration.commandline.Main.doMigration(Main.java:1511) at liquibase.integration.commandline.Main.lambda$run[=14=](Main.java:367) at liquibase.Scope.lambda$child[=14=](Scope.java:160) at liquibase.Scope.child(Scope.java:169) at liquibase.Scope.child(Scope.java:159) at liquibase.Scope.child(Scope.java:138) at liquibase.integration.commandline.Main.run(Main.java:366) at liquibase.integration.commandline.Main.run(Main.java:196) at liquibase.Scope.child(Scope.java:169) at liquibase.Scope.child(Scope.java:145) at liquibase.integration.commandline.Main.run(Main.java:196) at liquibase.integration.commandline.Main.main(Main.java:158) BEST PRACTICE: The changelog generated by diffChangeLog/generateChangeLog should be inspected for correctness and completeness before being deployed. Liquibase command 'diffChangeLog' was executed successfully.

有什么想法吗?

为了生成增量差异,我们需要在 liquibaseDiffChangelog

之前先 运行 任务 liquibaseUpdate

添加了以下扩展

task generateLiquibaseChangelog {
    dependsOn 'clean'
    dependsOn 'liquibaseUpdate'
    dependsOn 'liquibaseDiffChangeLog'

    tasks.findByName('liquibaseUpdate').mustRunAfter 'clean'
    tasks.findByName('liquibaseDiffChangeLog').mustRunAfter 'liquibaseUpdate'

    project.ext."excludeLog4j"="true"
    project.ext."runList"="diffLog"
    project.ext."liquibaseTimestamp"=getTimestamp()
}

def getTimestamp() {
    return new Date().format('yyyyMdHHms')
}