可选的Gradle属性

Vad*_*imo 10 gradle build.gradle

我有一个Gradle构建文件,其中一个任务是登录docker.在此任务中,我希望user/CI提供参数docker_username,docker_password和docker_email.

task loginDockerHub(group: "Docker",  type:Exec) {        
    executable "docker"
    args "login","-u", docker_username, "-p", docker_password, "-e", docker_email
}
Run Code Online (Sandbox Code Playgroud)

执行gradle loginDockerHub -Pdocker_username=vad1mo ...all正在按预期工作.

但是,当我执行例如,gradle build我得到错误:

无法在任务':loginDockerHub'上找到属性'docker_username'.

我希望在gradle loginDockerHub不提供-P参数的情况下执行此错误,但不会在不访问docker_username/password参数的其他任务上执行此错误.

如何loginDockerHub在Gradle中为我的任务提供可选参数,这些参数不会使参数成为任何其他任务的必需参数.

Mar*_*ira 15

您可以检查属性是否存在,如果不是则返回默认值.

args "login", "-u", project.hasProperty("docker_username") ? docker_username : ""
Run Code Online (Sandbox Code Playgroud)

更新:从Gradle 2.13开始,您可以稍微简化一下.

args "login", "-u", project.findProperty("docker_username") ?: ""
Run Code Online (Sandbox Code Playgroud)


Vad*_*imo 5

我无法找到问题的解决方案。此描述暗示了有关在任务中声明操作的信息。将 shell exec 放入操作任务中具有我所期望的行为,因为操作是在任务执行时评估的。

task loginDockerHub(group: "Docker",  type:Exec) {
    doFirst{
        executable "docker"
        args "login","-u", docker_username, "-p", docker_password, "-e", docker_email
    }
}
Run Code Online (Sandbox Code Playgroud)

执行时loginDockerHub不提供docker_*参数会报错。执行任何其他任务都将按预期进行。