es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener valores actualizados de Flyway al ejecutar flywayMigrate con propiedades?

Quiero escribir los detalles de conexión de Flyway en un archivo, para poder utilizar estos valores en una tarea personalizada de JavaExec. Si quieres saber más al respecto, puedes leer:
https://stackoverflow.com/questions/70346538/how-to-run-a-javaexec-gradle-task-with-arguments-when-the-task-is-called-in-fina/70346713#70346713

He creado una tarea que escribe la URL, el usuario y la contraseña en un archivo y funciona, pero el problema es que siempre está utilizando los valores predeterminados del bloque flyway {} en el archivo build.gradle y ignora los valores anulados en caso de que se ejecute flywayMigrate con argumentos como estos:

./gradlew flywayMigrate -Pflyway.user=admin -Pflyway.password=secret

A continuación, puedes ver la tarea que escribe los valores en el archivo.

task writeArgstoFile {
    doFirst {
        mkdir "${rootProject.buildDir}/check-db-standards"
        new File("${rootProject.buildDir}/check-db-standards/args").text = "${flyway.url}\n" +
                "${flyway.user}\n" +
                "${flyway.password}\n"
    }
}

flywayMigrate.finalizedBy(writeArgstoFile)
writeArgstoFile.finalizedBy(rootProject.checkOracleStandards)

¿Cómo puedo obtener los valores actualizados correctos de Flyway?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para obtener los valores actualizados correctos de flyway, debes asegurarte de que la tarea writeArgstoFile dependa de la tarea flywayMigrate con las entradas y salidas necesarias. Esto asegurará que la tarea se ejecute solo una vez que la tarea flywayMigrate haya finalizado y las entradas de la tarea hayan cambiado.

    Aquí tienes una versión actualizada de la tarea writeArgstoFile:

    task writeArgstoFile {
        inputs.property("flywayUrl", flyway.url)
        inputs.property("flywayUser", flyway.user)
        inputs.property("flywayPassword", flyway.password)
    
        outputs.file("$rootProject.buildDir/check-db-standards/args")
    
        doLast {
            mkdir("$rootProject.buildDir/check-db-standards")
            new File("$rootProject.buildDir/check-db-standards/args").text = "${flyway.url}\n${flyway.user}\n${flyway.password}\n".trim()
        }
    }
    
    writeArgstoFile.dependsOn(flywayMigrate)
    rootProject.checkOracleStandards.dependsOn(writeArgstoFile)
    

    En esta versión actualizada, estamos especificando las entradas utilizando el método inputs.property() y las salidas utilizando el método outputs.file(). Los bloques inputs y outputs aseguran que la tarea se ejecute solo una vez que la tarea flywayMigrate haya finalizado y las entradas de la tarea hayan cambiado.

    Finalmente, estamos especificando las dependencias entre las tareas utilizando el método dependsOn(). Con estos cambios, la tarea writeArgstoFile ahora debería utilizar correctamente los valores actualizados de flyway.

Comments are closed.