Мне трудно настроить LiquiBase в моем проекте Spring Boot.Я попытался просмотреть документы и найти некоторые руководства - но они, кажется, противоречат друг другу: (
Я хочу использовать LiquiBase через Gradle, и я хочу, чтобы он генерировал журналы изменений из Hibernate и заканчивал сценарием SQL, который яможет работать на сервере для обновления схемы до соответствующей версии.
Чтобы запустить ее через Gradle, я использую этот плагин https://github.com/liquibase/liquibase-gradle-plugin, используя рекомендованную настройку, указанную в их файле README.
Чтобы заставить работать Hibernate, я использую 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')
}
Запуск его через
> .\gradlew diffChangeLog -PrunList=main
Но происходит сбой с
Задача: diffChangeLog liquibase-plugin: Запуск основного действия ... Запуск Liquibaseв среду, 26 сентября 2018 13:36:24 CEST (версия 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'
}
Обратите внимание на
// Все ваши обычные зависимости проекта будут здесь в дополнение к ...
Так что да.Почему ...
Пожалуйста, помогите!
Также ... Я заметил, что вы должны написать конфигурацию базы данных дважды.Зачем это нужно, если он уже установлен в конфигурации весенней загрузки?
PROGRESS
Так что 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')
Заставляет ошибки исчезнуть.Но это все равно не работает.
Выполнение этой команды
. \ Gradlew diff
Дает мне этот вывод
> Task :diff
liquibase-plugin: Running the 'main' activity...
Starting Liquibase at Wed, 26 Sep 2018 16:47:19 CEST (version 3.6.2 built at 2018-07-03 11:28:09)
Diff Results:
Reference Database: null @ hibernate:spring:com.example.model?dialect=org.hibernate.dialect.Oracle10gDialect (Default Schema: HIBERNATE)
Comparison Database: SYSTEM @ jdbc:oracle:thin:@localhost:1521:XE (Default Schema: SYSTEM)
Compared Schemas: HIBERNATE -> SYSTEM
Product Name:
Reference: 'Hibernate'
Target: 'Oracle'
Product Version:
Reference: '5.2.17.Final'
Target: 'Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production'
Missing Catalog(s):
HIBERNATE
Unexpected Catalog(s): NONE
Changed Catalog(s): NONE
Missing Column(s): NONE
Unexpected Column(s): NONE
Changed Column(s): NONE
Missing Foreign Key(s): NONE
Unexpected Foreign Key(s): NONE
Changed Foreign Key(s): NONE
Missing Index(s): NONE
Unexpected Index(s): NONE
Changed Index(s): NONE
Missing Primary Key(s): NONE
Unexpected Primary Key(s): NONE
Changed Primary Key(s): NONE
Missing Sequence(s): NONE
Unexpected Sequence(s): NONE
Changed Sequence(s): NONE
Missing Stored Procedure(s): NONE
Unexpected Stored Procedure(s): NONE
Changed Stored Procedure(s): NONE
Missing Table(s): NONE
Unexpected Table(s): NONE
Changed Table(s): NONE
Missing Unique Constraint(s): NONE
Unexpected Unique Constraint(s): NONE
Changed Unique Constraint(s): NONE
Missing View(s): NONE
Unexpected View(s): NONE
Changed View(s): NONE
Liquibase command 'diff' was executed successfully.
BUILD SUCCESSFUL in 7s
1 actionable task: 1 executed
При работе с пустой базой данных.Так что да - это не работает: (