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 ejecutar una tarea JavaExec de Gradle con argumentos cuando la tarea es llamada en ‘finalizedBy’?

Creé una tarea JavaExec que se conecta a una base de datos y realiza algunas verificaciones. En mi archivo build.gradle de Flyway, llamo a la tarea de la siguiente manera:

flywayMigrate.finalizedBy(rootProject.checkOracleStandards)

La tarea funciona bien, pero el problema es que la URL de conexión, el usuario y la contraseña están codificados en el programa que se conecta a la base de datos y realiza las verificaciones. Quiero pasarlos como argumentos a la tarea personalizada.

¿Cómo ejecutar la tarea personalizada con argumentos después de flywayMigrate?

Así es como se ve mi archivo de tarea en Gradle:

apply plugin: 'java'

dependencies {
    implementation files('libs/check-oracle-db-standards-1.jar')

    implementation group: 'com.oracle.database.jdbc', name: 'ojdbc8', version: '21.3.0.0'
    implementation group: 'org.springframework', name: 'spring-jdbc', version: '5.3.13'
    implementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
}

task checkOracleStandards(type: JavaExec) {
    classpath = sourceSets.main.runtimeClasspath
    main = 'com.package.checkoracledbstandards.Main'
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para pasar argumentos a la tarea personalizada, puede modificar la definición de la tarea de la siguiente manera:

    “`task checkOracleStandards(type: JavaExec) {
    classpath = sourceSets.main.runtimeClasspath
    main = ‘com.package.checkoracledbstandards.Main’
    args “url”, “user”, “password” // reemplace con valores reales
    }


    Luego, para ejecutar la tarea personalizada con los argumentos especificados después de `flywayMigrate`, puede modificar el archivo `build.gradle` de la siguiente manera: ```flywayMigrate.finalizedBy(checkOracleStandards) { args "url", "user", "password" // reemplace con valores reales }

    Esta configuración asegura que flywayMigrate se ejecute primero, seguido de checkOracleStandards con los valores de argumentos especificados.

    Alternativamente, puede utilizar un archivo de propiedades para almacenar los detalles de la conexión y pasar la ruta del archivo como argumento a la tarea personalizada. En este caso, la definición de la tarea checkOracleStandards se vería así:

    task checkOracleStandards(type: JavaExec) {
    classpath = sourceSets.main.runtimeClasspath
    mainClassName = 'com.package.checkoracledbstandards.Main'
    args "connection.properties" // reemplace con la ruta del archivo real
    }

    Y en el archivo build.gradle:

    flywayMigrate.finalizedBy(checkOracleStandards) {
    args "connection.properties" // reemplace con la ruta del archivo real
    }

    Dentro de su código Java, luego puede leer los detalles de la conexión desde el archivo de propiedades especificado.

Comments are closed.