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
будет таким же простым?
Ответы
Ответ 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
; есть, вероятно, лучшие способы достижения желаемого.