У меня есть этот код отладки в root/build.gradle
:
task copyJenkinsIdea(type: Copy) {
onlyIf {
project.hasProperty("isJenkins")
}
doLast {
println "Do Jenkins-specific setup"
println "${project.hasProperty("isJenkins")} && ${isJenkins} = ${(project.hasProperty("isJenkins") && isJenkins)}"
println "${project.hasProperty("isJenkins")} && ${project.isJenkins} = ${(project.hasProperty("isJenkins") && project.isJenkins)}"
println "true && false = ${(true && false)}"
}
from ".idea/Jenkins"
into ".idea"
}
Я запускаю его с помощью этой команды:
./gradlew --console=verbose -PisJenkins=false assembleDebug
Зависимость задач в root/app/build.gradle
preBuild.dependsOn(":copyJenkinsIdea")
И это дает мне этот вывод:
> Configure project :app
[snip]
> Task :copyJenkinsIdea
Do Jenkins-specific setup
true && false = true
true && false = true
true && false = false
Свойство отсутствует в файле gradle.properties.
Я должен что-то упустить, потому что это невозможно.
Оказывается, Groovy не может знать, что передаваемое свойство является логическим. это делает
class java.lang.Boolean && class java.lang.String
true && "false"
Что, собственно, и есть true
.