Неправильный порядок выполнения задач в Gradle 3.3
Я хочу определить методы в моем файле сценария и использовать их для определения задач сборки для каждого отдельного проекта (пользовательская библиотека).
ext.buildDockerImage = { imageName ->
def distDir = "${getProject().getBuildDir()}/docker"
copy {
from "${project.getProjectDir()}/src/docker/"
into distDir
}
println 'Build docker image'
}
В моем проекте build.gradle
Я создал задачу:
apply plugin: "war"
apply plugin: "jacoco"
dependency {
// all dependencies
}
task buildDocker() {
apply from: "${project.getRootDir()}/docker/scripts.gradle"
buildDockerImage("admin")
}
Проблема в том, что всякий раз, когда я бегу gradle build
Данную задачу выполняет также:
$ gradle build -xtest
Build docker image
# rest of build
Как видите, все, что мне нужно, - это создать собственную библиотеку, которая будет содержать методы, используемые для создания задач для каждого проекта. Но в настоящее время я не могу импортировать эти методы без нарушения сборки. метод buildDockerImage
будет работать только после добавления файла war в каталог сборки, поэтому эту задачу нужно выполнять только по требованию, я не хочу, чтобы ее все время включали в процесс.
Мои вопросы:
- как заставить мою задачу запускаться только при выполнении задачи вручную
- почему, когда я выполняю сборку, скрипт выполняется первым?
1 ответ
Твое задание buildDocker()
определяет все на этапе конфигурации. Поэтому, когда вы запускаете сборку Gradle, она всегда будет работать.
task buildDocker() {
apply from: "${project.getRootDir()}/docker/scripts.gradle"
buildDockerImage("admin")
}
Если вы хотите запустить эту задачу как отдельную задачу, определите свои вещи на этапе выполнения задачи. что-то вроде ниже
task buildDocker() {
apply from: "${project.getRootDir()}/docker/scripts.gradle"
doLast{
buildDockerImage("admin")
}
}
Это может помочь