Переменная Gradle недоступна для задачи копирования и переименования - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь использовать переменную (заполняемую из общего файла), чтобы добавить номер версии, когда война создается плагином весенней загрузки bootWar.Однако, похоже, что переменная не находится в области видимости.Я добавил doFirst в bootWar, чтобы показать, что переменная действительно заполняется до начала войны. Этот вопрос предлагает использовать проект, но он также не работает (вторая попытка ниже).Разве невозможно использовать переменную в этой точке процесса сборки?

task populateBuildVersion (dependsOn: ["buildVersionFromFile", "buildVersionPlaceholder"]){
  doLast {
        project.ext.buildVersion = buildVersion
    println "------------------------------------------------------------------"
    println "|   Build version: $buildVersion"
    println "------------------------------------------------------------------"
  }
}

bootWar {
  into('') {
    from "${project(':web').projectDir}/src/main/webapp"
        // PICK ONE, COMMENT THE OTHERS:
        rename "webpacked.js", buildVersion // fails at task runtime with "Caused by: java.lang.NullPointerException: replacement"
        rename "webpacked.js", project.buildVersion // fails at initialization with "Could not get unknown property 'buildVersion' for root project 'myproject' of type org.gradle.api.Project."
        rename "webpacked.js", "${buildVersion}.js" // results in null.js
  }
    doFirst {
        println "in bootWar dofirst: ${buildVersion}" // OK
        println buildVersion // OK
        println project.buildVersion // OK
    }
}
tasks.bootWar.dependsOn(populateBuildVersion)

Вывод:

> Task :populateBuildVersion
------------------------------------------------------------------
|   Build version: xyz_7.8.2_2417
------------------------------------------------------------------

> Task :bootWar
in bootWar dofirst: xyz_7.8.2_2417
xyz_7.8.2_2417
xyz_7.8.2_2417

> Task :bootWar FAILED (for various reasons)

1 Ответ

1 голос
/ 20 марта 2019

Используйте метод rename, который принимает Closure или Transformer<String, String> в качестве аргумента.Замыкание (или Трансформатор) будет вызвано, когда задача будет выполнена.В вашей версии свойство доступно при настройке задачи, и, таким образом, задача populateBuildVersion еще не выполнена:

from("${project(':web').projectDir}/src/main/webapp") {
    rename {
        it == 'webpacked.js' ? "${buildVersion}.js" : null
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...