我在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'
sourceCompatibility = 1.8
repositories {
mavenCentral()
maven {
credentials {
username = oracleUser
password = oraclePass
}
url 'https://www.oracle.com/content/secure/maven/content'
}
}
liquibase {
activities {
main {
changeLogFile 'main.groovy'
url 'jdbc:oracle:thin:@localhost:1521:XE'
referenceUrl 'hibernate:spring:com.example?dialect=org.hibernate.dialect.Oracle10gDialect'
username 'user'
password 'pass'
}
}
}
configurations {
providedRuntime
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-data-rest')
compile('org.springframework.boot:spring-boot-starter-hateoas')
compile('org.springframework.boot:spring-boot-starter-jooq')
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-starter-mail')
compile('com.github.waffle:waffle-spring-boot-starter:1.9.0')
compile('com.oracle.jdbc:ojdbc8:12.2.0.1')
runtime('org.springframework.boot:spring-boot-devtools')
compileOnly('org.projectlombok:lombok')
apt('org.projectlombok:lombok:1.18.2')
liquibaseRuntime('org.liquibase:liquibase-core:3.6.2')
liquibaseRuntime('org.liquibase:liquibase-groovy-dsl:2.0.1')
liquibaseRuntime('org.liquibase.ext:liquibase-hibernate5:3.6')
liquibaseRuntime('com.oracle.jdbc:ojdbc8:12.2.0.1') // duplicate...
providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('org.springframework.restdocs:spring-restdocs-mockmvc')
}
通过运行
但是失败了
看起来找不到Spring Boot。因此,我然后尝试删除
liquibaseRuntime
,但是LiquiBase Gradle插件提示liquibaseRuntime
丢失。似乎我陷入了循环。进行此设置的理智的方法是什么?
我真的不想重复
liquibaseRuntime
内部的每个依赖项。另外,文档字面意思是:注意
是的。为什么...
请帮忙!
另外...我注意到您必须编写两次数据库配置。为什么已经在spring boot config中设置了它,为什么呢?
进行中
因此将
liquibaseRuntime
更改为liquibaseRuntime('org.liquibase:liquibase-core:3.6.2')
liquibaseRuntime('org.liquibase:liquibase-groovy-dsl:2.0.1')
liquibaseRuntime('org.liquibase.ext:liquibase-hibernate5:3.6')
liquibaseRuntime('com.oracle.jdbc:ojdbc8:12.2.0.1')
liquibaseRuntime('org.springframework.boot:spring-boot-starter-data-jpa')
liquibaseRuntime files('src/main')
使错误消失。但这仍然行不通。
运行此命令
给我这个输出
针对空数据库运行时。是的-它不起作用:(
最佳答案
原来,我需要添加一些无证的魔术酱。
diff.dependsOn compileJava
diffChangeLog.dependsOn compileJava
generateChangelog.dependsOn compileJava
dependencies {
// as before
liquibaseRuntime sourceSets.main.output // replaces liquibaseRuntime files('src/main')
}
关于java - 在Gradle Spring Boot Hibernate项目中设置LiquiBase,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52517215/