【问题标题】:Is there a way to have Gradle call flywayMigrate on build?有没有办法让 Gradle 在构建时调用 flywayMigrate?
【发布时间】:2017-01-23 12:45:31
【问题描述】:

我发现每次运行 gradle build 时自动调用 Flyway's migrate command 非常有用。

Spring Boot 在后台执行此操作,但 Gradle 可以自己执行此操作吗?我有一个非 Boot 应用,我希望能够以同样的方式管理它。

我希望它是一些生命周期钩子。 This question 很有帮助,但是如何执行 flyway 预构建?

【问题讨论】:

    标签: gradle flyway


    【解决方案1】:

    是的,你可以。你有几个选择。您可以随时进入生命周期。默认情况下,java gradle 插件有几个地方可以挂钩。

    $ ./gradlew clean build
    :clean
    :compileJava
    :processResources UP-TO-DATE
    :classes
    :jar
    :assemble
    :compileTestJava
    :processTestResources UP-TO-DATE
    :testClasses
    :test
    :check
    :build
    

    您可以附加到这些点中的任何一个

    或者,如果您需要在其他任何事情之前应用,那么您可能需要考虑一个简单的插件。

    以下是两者的示例:

    build.gradle:

    apply plugin: 'java'
    
    repositories {
        jcenter()
    }
    
    dependencies {
        testCompile 'junit:junit:4.12'
    }
    
    task runFlyAwayCommand << {
        // process is type java.lang.Process
        def process = "printf lifecycle hooked task".execute()
        def processExitValue = process.waitFor()
        def processOutput = process.text
        project.logger.lifecycle("Flyaway{ exitValue: $processExitValue output: $processOutput }")
    }
    
    // compileJava could be any lifecycle task
    tasks.findByName('compileJava').dependsOn tasks.findByName('runFlyAwayCommand')
    
    
    // if you need to execute earlier you might want to create a plugin
    apply plugin: SamplePlugin
    
    class SamplePlugin implements Plugin<Project> {
    
        @Override
        void apply(Project project) {
            def process = "printf plugin apply".execute()
            def processExitValue = process.waitFor()
            def processOutput = process.text
            project.logger.lifecycle("Flyaway{ exitValue: $processExitValue output: $processOutput }")
        }
    }
    

    输出:

    $ ./gradlew clean build
    Configuration on demand is an incubating feature.
    Flyaway{ exitValue: 1 output: plugin }
    :clean
    :runFlyAwayCommand
    Flyaway{ exitValue: 1 output: lifecycle }
    :compileJava
    :processResources UP-TO-DATE
    :classes
    :jar
    :assemble
    :compileTestJava
    :processTestResources UP-TO-DATE
    :testClasses
    :test
    :check
    :build
    
    BUILD SUCCESSFUL
    
    Total time: 1.294 secs
    

    【讨论】:

    • 感谢您周到的回答,我会试一试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 2016-12-31
    • 2023-04-08
    相关资源
    最近更新 更多