为了账号安全,请及时绑定邮箱和手机立即绑定

在 Gradle Spring Boot Hibernate 项目中设置 LiquiBase

在 Gradle Spring Boot Hibernate 项目中设置 LiquiBase

哆啦的时光机 2021-10-13 10:42:19
我很难在我的 Spring Boot 项目中设置 LiquiBase。我尝试浏览文档并找到一些指南 - 但它们似乎相互矛盾:(我希望通过 Gradle 使用 LiquiBase,我希望它从 Hibernate 生成变更日志,并最终得到一个可以在服务器上运行的 SQL 脚本,以将架构更新到适当的版本。为了让它通过 Gradle 运行,我使用这个插件 https://github.com/liquibase/liquibase-gradle-plugin使用他们的自述文件中显示的推荐设置。为了让 Hibernate diff 正常工作,我正在使用https://github.com/liquibase/liquibase-hibernate这是我的build.gradle文件:buildscript {    ext {        springBootVersion = '2.0.5.RELEASE'    }    repositories {        mavenCentral()    }    dependencies {        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")    }}plugins {    id 'java'    id 'net.ltgt.apt' version '0.10' // https://projectlombok.org/setup/gradle    id 'org.liquibase.gradle' version '2.0.1' // https://github.com/liquibase/liquibase-gradle-plugin}apply plugin: 'eclipse-wtp'apply plugin: 'org.springframework.boot'apply plugin: 'io.spring.dependency-management'apply plugin: 'war'group = 'com.example'version = '0.0.1-SNAPSHOT'    }}通过运行它> .\gradlew diffChangeLog -PrunList=main但失败了任务 :diffChangeLog liquibase-plugin:运行“主要”活动...在 2018 年 9 月 26 日星期三 13:36:24 CEST 启动 Liquibase(版本 3.6.2,构建于 2018-07-03 11:28:09)异常线程“main” java.lang.NoClassDefFoundError: org/springframework/core/io/ClassPathResource at liquibase.ext.hibernate.database.HibernateSpringPackageDatabase.isXmlFile(HibernateSpringPackageDatabase.java:54)看起来它找不到Spring Boot。所以我然后尝试删除liquibaseRuntime但是 LiquiBase Gradle 插件抱怨liquibaseRuntime缺少。似乎我陷入了一个循环。什么是设置它的理智方法?我真的不想重复liquibaseRuntime. 文档也从字面上说:dependencies {  // All of your normal project dependencies would be here in addition to...  liquibaseRuntime 'org.liquibase:liquibase-core:3.6.1'  liquibaseRuntime 'org.liquibase:liquibase-groovy-dsl:2.0.1'  liquibaseRuntime 'mysql:mysql-connector-java:5.1.34'}请注意// 除了...是的。为什么...请帮忙!另外...我注意到你必须写两次数据库配置。当它已经在 spring boot 配置中设置时,为什么需要它?
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

原来我需要添加一些无证的魔法酱。


diff.dependsOn compileJava

diffChangeLog.dependsOn compileJava

generateChangelog.dependsOn compileJava


dependencies {

   // as before

   liquibaseRuntime sourceSets.main.output // replaces liquibaseRuntime files('src/main')

}


查看完整回答
反对 回复 2021-10-13
?
倚天杖

TA贡献1828条经验 获得超3个赞

我知道这是一个旧线程,但我想为那些后来找到这个答案的人添加一些说明......

liquibaseRuntime配置不从任何其他配置继承。这是因为在大多数情况下,Liquibase 只需要能够解析更改日志并连接到数据库。要使用 Hibernate 模块之类的东西,或从代码生成更改日志,您需要向 liquibaseRuntime 添加额外内容,例如 Hibernate 或 Spring Data,并且您需要srcSets.main.output能够自己找到项目文件。

评论说“除了...之外,您的所有正常项目依赖项都将在这里...”指的是您将在块中拥有一堆其他依赖项来构建和运行您的项目,而不是它们将成为一部分的liquibaseRuntime配置。如果你想所有的库从您的项目也成为团队的一分子liquibaseRuntime,你可以添加configurations.liquibaseRuntime.extendsFrom configurations.runtime你你的build.gradle,或者如果你已经有一个configurations块,你可以添加liquibaseRuntime.extendsFrom runtime到该块。这应该将所有项目依赖项和项目文件本身添加到您的 liquibaseRuntime。

我希望这有帮助。


查看完整回答
反对 回复 2021-10-13
  • 2 回答
  • 0 关注
  • 249 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信