我有一个来自插件的任务,我在命令行上这样调用它:

$ gradle myTask -PsomeArg=<value>

我想定义另一个与默认参数值完全相同的任务。我希望能够这样称呼它:
$ gradle otherTask

我认为我的任务应如下所示:
task otherTask (dependsOn: 'myTask', someArg: 'value') {...}

最佳答案

您可以定义一个任务,当不将此参数作为命令行参数提供时,它将为项目属性someArg设置默认值:

task otherTask (){
    finalizedBy myTask
    doFirst{
        if (!project.hasProperty("someArg")) {
            project.ext.set("someArg", "defaultValue")
        }
    }
}

请注意,您需要在此处使用finalizedBy依赖类型:如果您使用otherTask.dependsOn myTask,则将首先执行myTask任务(因此,尚未设置someArg属性的默认值)

执行结果:
./gradlew myTask -PsomeArg=myValue
  > Task :myTask
    executing task pluginTask with arg: myValue

./gradlew otherTask -PsomeArg=myValue
  > Task :myTask
    executing task pluginTask with arg: myValue

./gradlew otherTask
  > Task :myTask
    executing task pluginTask with arg: defaultValue

10-08 13:48