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'
}
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
}
Esta configuración asegura que
flywayMigrate
se ejecute primero, seguido decheckOracleStandards
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.