如何在 finalizedBy 中调用任务时 运行 带有参数的 JavaExec gradle 任务?

How to run a JavaExec gradle task with arguments when the task is called in finalizedBy?

我创建了一个连接到数据库并进行一些检查的 JavaExec 任务。在我的飞行路线 build.gradle 中,我这样称呼任务:

flywayMigrate.finalizedBy(rootProject.checkOracleStandards)

任务运行良好,但问题是连接 url、用户和密码在连接到数据库并进行检查的程序中被硬编码。我想将它们作为参数传递给自定义任务。

如何在 flywayMigrate 后 运行 带有参数的自定义任务?

这是我的任务 gradle 文件的样子:

apply plugin: 'java'

dependencies {
    implementation rootProject.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'
}

由于 share/pass 任务之间参数的最佳方式是通过文件,让任务将它们写入某处的文件,然后让您的 checkOracleStandards 任务从该文件加载它们。

确保将参数写入 doLast 块中的文件,以避免每次 gradle 同步时都有任务 运行。

最后,让您的 checkOracleStandards 任务打开文件,解析参数并以某种方式使用它们。

val outputPath = "${rootProjectPath}/build/check_params" <-- you may not want to use a folder for this
val paramFile = file("${outputPath}/check_params")

 doLast {
            if (paramFile.exists().not()) {
                paramFile.writeText()

                File(outputPath)
                    .walk()
                    .maxDepth(1)
                    .filter {
                        it.isFile
                                && it.name.endsWith("_params")
                    }
                    .forEach {
                        println("Passing params of ${it.name} into ${paramsFile.absolutePath}")
                        // PARSE params here
                        paramsFile.appendText("url: ${use_your_real_url}\tuser: ${use_your_real_user}\tpass: ${use_the_password}")
                        paramsFile.appendText("\n")
                    }

如果不确定,应该在你的 checkOracleStandards 任务之前将这部分作为“传递参数”任务的一部分到 运行,然后修改你的 checkOracleStandards 任务以从中读取参数归档并使用它们。

编辑: 让我添加一些与答案本身无关的说明 - 我只会发表评论;然而 SO 改变了一些东西,我的浏览器目前无法在任何地方留下评论,所以我给了你一个应该只是评论的答案。