Gradle:以编程方式设置参数的自定义任务

Gradle:以编程方式设置参数的自定义任务,gradle,build.gradle,Gradle,Build.gradle,我有以下场景,我希望禁用JOOQ模式生成,除非明确要求: gradle.taskGraph.beforeTask { task -> if (!rootProject.hasProperty("generate") && task.name.equals("generateSampleJooqSchemaSource")) { task.enabled = false } } 现在,当将“generate”作

我有以下场景,我希望禁用JOOQ模式生成,除非明确要求:

gradle.taskGraph.beforeTask {
    task ->
        if (!rootProject.hasProperty("generate") && task.name.equals("generateSampleJooqSchemaSource")) {
            task.enabled = false
        }
}
现在,当将“generate”作为参数传递时,我总是可以手动生成模式,如下所示:

$ gradle build -Pgenerate
task generate {
    tasks[build].executeWithParameter("generate")
}
而正常的

$ gradle build 
不会重新生成所有模式类

然而,我不太喜欢这种方法。您必须记住参数名称,并在其前面加上看起来不干净的
-P

理想情况下,我希望能够完成如下定制任务:

$ gradle build -Pgenerate
task generate {
    tasks[build].executeWithParameter("generate")
}
因此,它也将显示为一个实际的任务


如何完成此任务?

您可以创建一个依赖于构建任务的任务,并从中禁用jooq任务。这要求任务声明放在jooq任务声明之后

task generate (dependsOn: build) {
    tasks['generateSampleJooqSchemaSource'].enabled = false
}
从任务设置项目属性的步骤

task generate (dependsOn: build) {
    project.ext.generate = "true"
}

您可以创建一个依赖于构建任务的任务,并从中禁用jooq任务。这要求任务声明放在jooq任务声明之后

task generate (dependsOn: build) {
    tasks['generateSampleJooqSchemaSource'].enabled = false
}
从任务设置项目属性的步骤

task generate (dependsOn: build) {
    project.ext.generate = "true"
}

这并不是我要问的-上面的
taskGraph
示例已经按照我的意愿禁用了任务。我想要的是一个任务,它模拟正在传递的参数(即
-Pgenerate
),然后正常调用
生成任务。@user991710我添加了这个示例。构建任务仍然通过dependsOn调用。您还可以使用finalizedBy。这与我的要求不完全一样-上面的
taskGraph
示例已经按照我的意愿禁用了任务。我想要的是一个任务,它模拟正在传递的参数(即
-Pgenerate
),然后正常调用
生成任务。@user991710我添加了这个示例。构建任务仍然通过dependsOn调用。也可以使用finalizedBy。