将属性传递给自定义gradle任务

pep*_*uch 9 groovy gradle

如何将属性传递给gradle自定义任务?在蚂蚁它看起来像这样:

public class MyCustomTask extends Task {

    private String name;
    private String version;

    @Override
    public void execute() throws BuildException {
        // do the job
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setVersion(String version) {
        this.version = version;
    }

}
Run Code Online (Sandbox Code Playgroud)

如何在gradle中完成?

class MyCustomTask extends DefaultTask {

    private String name
    private String version

    @TaskAction
    def build() {
        // do the job
    }

}
Run Code Online (Sandbox Code Playgroud)

属性名称和版本是必需的,用户需要将它们传递给任务.

pep*_*uch 12

我找到了解决方案:

class MyCustomTask extends DefaultTask {

    @Input
    String name
    @Input
    String version

    @TaskAction
    def build() {
        // do the job
        println name
        println version
    }

}
Run Code Online (Sandbox Code Playgroud)

使用示例:

task exampleTask(type: MyCustomTask) {
    name = "MyName"
    version = "1.0"
}
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是@Input注释实际上是由任务的upToDateWhen方法用来确定是否需要重新运行任务.机会相当不错,这对你的用例来说仍然是正确的,但如果这是一个意想不到的副作用,你可能只是将`private String name`改为`def String name`而groovy会处理getter和setter for您. (5认同)

Sau*_*abh 7

您可以使用-P选项来传递命令行参数。

例如:

public class MyCustomTask extends DefaultTask {

    String name;
    String version;

    @TaskAction
    public void execute() throws BuildException {
        // do the job
    }
}
Run Code Online (Sandbox Code Playgroud)

Gradle 任务

 task exampleTask(type: MyCustomTask) {
    name = project.property("name")
    version = project.property("version")
} 
Run Code Online (Sandbox Code Playgroud)

摇篮命令

gradle -Pname="My name" -Pversion="1.2.3"
Run Code Online (Sandbox Code Playgroud)

检查https://docs.gradle.org/current/userguide/gradle_command_line.html以了解 Gradle 的所有命令行选项。