在 Gradle Spring Boot Hibernate 项目中设置 LiquiBase

我很难在我的 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 配置中设置时,为什么需要它?


哆啦的时光机
浏览 250回答 2
2回答

蝴蝶刀刀

原来我需要添加一些无证的魔法酱。diff.dependsOn compileJavadiffChangeLog.dependsOn compileJavagenerateChangelog.dependsOn compileJavadependencies {   // as before   liquibaseRuntime sourceSets.main.output // replaces liquibaseRuntime files('src/main')}

倚天杖

我知道这是一个旧线程,但我想为那些后来找到这个答案的人添加一些说明......该liquibaseRuntime配置不从任何其他配置继承。这是因为在大多数情况下,Liquibase 只需要能够解析更改日志并连接到数据库。要使用 Hibernate 模块之类的东西,或从代码生成更改日志,您需要向 liquibaseRuntime 添加额外内容,例如 Hibernate 或 Spring Data,并且您需要srcSets.main.output能够自己找到项目文件。评论说“除了...之外,您的所有正常项目依赖项都将在这里...”指的是您将在块中拥有一堆其他依赖项来构建和运行您的项目,而不是它们将成为一部分的liquibaseRuntime配置。如果你想所有的库从您的项目也成为团队的一分子liquibaseRuntime,你可以添加configurations.liquibaseRuntime.extendsFrom configurations.runtime你你的build.gradle,或者如果你已经有一个configurations块,你可以添加liquibaseRuntime.extendsFrom runtime到该块。这应该将所有项目依赖项和项目文件本身添加到您的 liquibaseRuntime。我希望这有帮助。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java