Сборка Gradle имеет три отдельных фазы : инициализацию, конфигурацию и выполнение. node { download = true }
выполняется на этапе настройки, тогда как тело вашей задачи execute
выполняется на этапе выполнения.
Чтобы вычислить результат на этапе настройки, вы должны изменить свою задачу execute
в обычную функцию Groovy:
bash-3.2$ cat build.gradle
ext {
nodeVersion = getNodeVersion()
}
def getNodeVersion() {
def baos = new ByteArrayOutputStream()
def execResult = project.exec {
commandLine 'node', '-v'
standardOutput = baos
}
return baos.toString();
}
task printNodeVersion {
doLast {
println(project.nodeVersion)
}
}
bash-3.2$ ./gradlew :printNodeVersion
> Task :printNodeVersion
v13.12.0
BUILD SUCCESSFUL in 566ms
1 actionable task: 1 executed
Здесь я сохраняю версию узла в объекте расширения ext
во время конфигурации времени и печатаю значение в задаче printNodeVersion
во время выполнения времени.
Для вашего варианта использования вы должны вызвать функцию и проверить, равно ли возвращаемое значение «8.17.0» во время конфигурации времени. Если да, то двоичный файл node
имеет версию 8.17.0, в противном случае двоичный файл узла имеет другую версию (или, возможно, узел отсутствует).