Неправильный порядок выполнения задач в 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")
  }
}

Читать эту статью

Это может помочь

Другие вопросы по тегам