Gradle сбор задач уже существует - программирование
Подтвердить что ты не робот

Gradle сбор задач уже существует

Я получаю сообщение об ошибке

Cannot add task ':webserver:build' as a task with that name already exists.

Странно, что моя задача hello прекрасна, но моя задача build не является И ДА, я пытаюсь переопределить задачу сборки плагина Java.

Мастер build.gradle файл:

allprojects {
   apply plugin: 'java'
   apply plugin: 'eclipse'

   task hello << { task -> println "I'm $task.project.name" }
   task build << { task -> println "I'm building now" }
}

subprojects {

    hello << {println "- I depend on stserver"}

    build << { println "source sets=$sourceSets.main.java.srcDirs" }
}

Мой дочерний веб-сервер build.gradle файл:

sourceSets.main{
  java.srcDirs = ['app']
}

build << { println "source sets=$sourceSets.main.java.srcDirs" }

hello << {println "- Do something specific xxxx"}

В чем заключена сделка, переопределяющая build специальная или что-то еще? Переопределение моей задачи hello работало нормально, и я думал, что переопределение build будет таким же простым?

4b9b3361

Ответ 1

В чем заключена сделка, переопределение сборки - это нечто особенное. Переопределение моей собственной задачи привет работало отлично, и я думал, что надстройка будет такой же простой?

Причина, по которой поведение кажется другим, состоит в том, что задача build уже существует, а hello - нет (а не потому, что build является специальным).

В gradle вы не можете этого сделать:

task hello << { print "hello" }
task hello << { print "hello again" }

Это приведет к ошибке с известной ошибкой: "Cannot add task ':hello' as a task with that name already exists.".

Так как задача build уже существует, она имеет незаконный доступ ко второй task build << { ... }. Однако он будет работать для задачи hello, потому что он не существует, и поэтому task hello << { ... } является законным, так как это первое объявление задачи hello.

Если вы замените task build << { ... } на build << { ... }, что добавит больше поведения к существующей задаче, оно будет "компилироваться" в порядке.

Ответ 2

Вы не переопределяете задачу hello, вы просто добавляете больше действий задачи. Вы можете переопределить задачу с помощью task foo(overwrite: true). Я не нашел достаточной причины для отмены задачи build; есть, вероятно, лучшие способы достижения желаемого.