有可以用这样的参数执行的任务:
./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/