gradle - 将参数传递给自定义任务的可靠任务

标签 gradle plugins

有可以用这样的参数执行的任务:

./gradlew taskX -Pkey=value

和应该执行的自定义任务插件 taskX :

class CustomPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        project.tasks.register("custom", CustomTask::class.java)
            .configure {
                it.description = "Description"
                it.group = "Group"

                val taskX = project.getTasksByName("taskX", true).first()

                it.dependsOn(taskX)
            }
    }
}

例如,我希望这样的事情:

it.dependsOn(taskX, "key=value")

如何将参数传递给 dependsOn ?

最佳答案

简单的回答:你不能。 任务依赖只表达 什么 需要提前做,不怎么样它需要完成。

让我向您展示一个简单的例子,为什么在 Gradle 任务系统中不可能出现这样的事情:

首先,我们需要知道在 Gradle 中,每个任务只会被执行 一次 在单个调用(通常称为构建)中。现在想象一个需要在两个互不相关的任务之前运行的任务。一个很好的现实世界示例是任务 compileJava来自 Java plugin这两个test任务和 jar任务取决于。如 dependsOn将支持参数,可能会发生两个任务依赖于具有不同参数的单个任务。在这种情况下应该使用哪些参数?

作为解决方案,您可以直接在插件中配置其他任务。如果您只想在自定义任务运行时传递参数,您可能需要添加另一个作为设置运行的任务,并将所需的配置应用于实际任务:

task setup {
    doFirst {
        // apply configuration
    }
}

taskX.mustRunAfter setup

task custom {
    dependsOn setup
    dependsOn taskX
}

此示例使用 Groovy,但应该可以将其转换为 Kotlin 并在您的插件中使用它。

实参编辑

老实说,我对 Android Gradle 插件不是很熟悉,但是如果我得到 this documentation对了,项目属性(property)android.testInstrumentationRunnerArguments.annotation只是在构建脚本中使用以下代码的替代方法:
android {
    defaultConfig {
        testInstrumentationRunnerArgument 'annotation', '<some-value>'
    }
}

您可以尝试定义以下任务,然后使用 ./gradlew customTest 运行它
task customTest {
    doFirst {
        android.defaultConfig.testInstrumentationRunnerArgument 'annotation', '<some-value>'
    }
    finalizedBy 'connectedAndroidTest'
}

关于gradle - 将参数传递给自定义任务的可靠任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62419247/

相关文章:

gradle - gradle install 和 gradle publishToMavenLocal 有什么区别?

security - Spring Security插件不引发事件

plugins - 如何在 IntelliJ 中将插件下载到磁盘以进行离线安装

javascript - 为什么使用 data() 将函数存储在元素上?

android - 将 Spring for android 依赖项添加到 gradle + Android studio 项目

android - com.android.tools.r8.errors.a : MethodHandle. 调用和 MethodHandle.invokeExact 仅支持从 Android O 开始

java - 运行应用程序时无法合并 Dex 错误

android - 运行 "cordova build android"- 无法找到属性 android :fontVariationSettings and android:ttcIndex

java - Clover:检测后附加不需要的代码

Wordpress - 授予用户特定的插件访问权限