Как передать аргументы командной строки пользовательской задаче Exec gradle?

#gradle

#gradle

Вопрос:

Я пытаюсь передать аргумент командной строки задаче Gradle Exec. Итак, я хочу выполнить скрипт bash и присвоить ему параметр. Однако выполнение скрипта без параметра проходит плавно. Это просто сам параметр с тем @Option , который выдает значение null при печати. Мой код следующий

 import org.gradle.api.tasks.options.Option;


task buildSamples(type: SampleExecTask){
    command()   
}

class SampleExecTask extends Exec {
    private String argument;

    @Option(option = "argument", description = "An argument for the script")
    public void setSample(String argument) {
        this.argument = argument;
    }

    @Input
    public String getArgument() {
        return argument;
    }
    
    void command() {
        println(argument);
        commandLine 'sh', 'myBashScript.sh'
    }
}

 

У кого-нибудь есть идеи, почему значение моего аргумента равно нулю и не устанавливается?
Заранее спасибо!

Ответ №1:

Он устанавливается, но не в то время, когда вы ссылаетесь на него. Большинство объектов в Gradle оцениваются лениво, и во время настройки не гарантируется, что они будут полностью настроены.

Если вы вставляете command() doFirst блок, он не должен быть нулевым.

Однако более правильным способом дополнить задачу Exec дополнительным аргументом из параметра командной строки, вероятно, является настройка стандартных args свойств в установщике:

 // Groovy DSL
task buildSamples(type: SampleExecTask)

class SampleExecTask extends Exec {
    @Option(option = "argument", description = "An argument for the script")
    public void setSample(String argument) {
        args(argument)
    }
    
    // Base configuration can be set in the constructor
    SampleExecTask() {
        executable('sh')
        args('myBashScript.sh')
    }
}