«1. Обзор
В этой статье мы расскажем, как создать пользовательскую задачу в Gradle. Мы покажем новое определение задачи с использованием сценария сборки или пользовательского типа задачи.
Введение в Gradle см. в этой статье. Он содержит основы Gradle и, что наиболее важно для этой статьи, введение в задачи Gradle.
2. Определение пользовательской задачи внутри build.gradle
Чтобы создать простую задачу Gradle, нам нужно добавить ее определение в наш файл build.gradle:
task welcome {
doLast {
println 'Welcome in the Baeldung!'
}
}
Основная цель приведенной выше задачи — просто для печати текста «Добро пожаловать в Baeldung!». Мы можем проверить, доступна ли эта задача, выполнив команду gradle tasks — all:
gradle tasks --all
Задача находится в списке в группе Другие задачи:
Other tasks
-----------
welcome
Ее можно выполнить так же, как и любую другую Задача Gradle:
gradle welcome
Вывод ожидаемый — сообщение «Добро пожаловать в Baeldung!».
Примечание: если опция «все» не установлена, то задачи, относящиеся к категории «Другое», не отображаются. Пользовательская задача Gradle может принадлежать к группе, отличной от «Другое», и может содержать описание.
3. Задайте группу и описание
Иногда бывает удобно сгруппировать задачи по функциям, чтобы они были видны в одной категории. Мы можем быстро установить группу для наших пользовательских задач, просто определив свойство группы:
task welcome {
group 'Sample category'
doLast {
println 'Welcome on the Baeldung!'
}
}
Теперь, когда мы запускаем команду Gradle для отображения всех доступных задач (опция all больше не нужна), мы см. нашу задачу в новой группе:
Sample category tasks
---------------------
welcome
Тем не менее, другим также полезно видеть, за что отвечает задача. Мы можем создать описание, содержащее краткую информацию:
task welcome {
group 'Sample category'
description 'Tasks which shows a welcome message'
doLast {
println 'Welcome in the Baeldung!'
}
}
Когда мы печатаем список доступных задач, вывод будет следующим:
Sample category tasks
---------------------
welcome - Tasks which shows a welcome message
Такой вид определения задачи называется определением ad-hoc.
Далее, полезно создать настраиваемую задачу, определение которой можно использовать повторно. Мы расскажем, как создать задачу из типа и как сделать некоторые настройки доступными для пользователей этой задачи.
4. Определите тип задачи Gradle внутри build.gradle
Приведенную выше «приветственную» задачу нельзя настроить, поэтому в большинстве случаев она не очень полезна. Мы можем запустить его, но если он нам нужен в другом проекте (или подпроекте), нам нужно скопировать и вставить его определение.
Мы можем быстро включить настройку задачи, создав тип задачи. Просто внутри скрипта сборки определяется тип задачи:
class PrintToolVersionTask extends DefaultTask {
String tool
@TaskAction
void printToolVersion() {
switch (tool) {
case 'java':
println System.getProperty("java.version")
break
case 'groovy':
println GroovySystem.version
break
default:
throw new IllegalArgumentException("Unknown tool")
}
}
}
Пользовательский тип задачи — это простой класс Groovy, который расширяет DefaultTask — класс, определяющий стандартную реализацию задачи. Существуют и другие типы задач, которые мы можем расширить, но в большинстве случаев класс DefaultTask является подходящим выбором.
Задача PrintToolVersionTask содержит свойство инструмента, которое может быть настроено экземплярами этой задачи:
String tool
Мы можем добавить столько свойств, сколько захотим — имейте в виду, что это просто простое поле класса Groovy.
Кроме того, он содержит метод с аннотацией @TaskAction. Он определяет, что делает эта задача. В этом простом примере выводится версия установленной Java или Groovy — зависит от заданного значения параметра.
Чтобы запустить пользовательскую задачу на основе созданного типа задачи, нам нужно создать новый экземпляр задачи этого типа:
task printJavaVersion(type : PrintToolVersionTask) {
tool 'java'
}
Наиболее важные части:
-
наша задача относится к типу PrintToolVersionTask, поэтому при выполнении это вызовет действие, определенное в методе, аннотированном с помощью @TaskAction, мы добавили настраиваемое значение свойства инструмента (java), которое будет использоваться PrintToolVersionTask
Когда мы запустим вышеуказанную задачу, результат будет таким, как ожидалось (зависит от версии Java). установлен):
> Task :printJavaVersion
9.0.1
Теперь давайте создадим задачу, которая печатает установленную версию Groovy:
task printGroovyVersion(type : PrintToolVersionTask) {
tool 'groovy'
}
Она использует тот же тип задачи, который мы определили ранее, но имеет другое значение свойства инструмента. Когда мы выполняем эту задачу, она печатает версию Groovy:
> Task :printGroovyVersion
2.4.12
Если у нас не слишком много пользовательских задач, мы можем определить их непосредственно в файле build.gradle (как мы сделали выше). Однако, если их больше нескольких, наш файл build.gradle становится трудно читать и понимать.
«К счастью, Gradle предоставляет для этого несколько решений.
5. Определите тип задачи в папке buildSrc
Мы можем определить типы задач в папке buildSrc, расположенной на корневом уровне проекта. Gradle компилирует все, что находится внутри, и добавляет типы в путь к классам, чтобы наш скрипт сборки мог их использовать.
Наш тип задачи, который мы определили ранее (PrintToolVersionTask), можно переместить в buildSrc/src/main/groovy/com/baeldung/PrintToolVersionTask.groovy. Нам нужно только добавить некоторые импорты из API Gradle в перемещенный класс.
Мы можем определить неограниченное количество типов задач в папке buildSrc. Его легче поддерживать, читать, а объявление типа задачи находится не в том же месте, что и инстанцирование задачи.
Мы можем использовать эти типы так же, как мы используем типы, определенные непосредственно в скрипте сборки. Мы должны помнить только о добавлении соответствующего импорта.
6. Определите тип задачи в плагине
Мы можем определить пользовательские типы задач внутри пользовательского плагина Gradle. Пожалуйста, обратитесь к этой статье, в которой описывается, как определить собственный плагин Gradle, определенный в:
-
файле build.gradle в папке buildSrc, как и другие классы Groovy
Эти пользовательские задачи будут доступны для нашей сборки, когда мы определим зависимость к этому плагину. Обратите внимание, что также доступны специальные задачи, а не только настраиваемые типы задач.
7. Заключение
В этом уроке мы рассмотрели, как создать пользовательскую задачу в Gradle. Существует множество доступных плагинов, которые вы можете использовать в своем файле build.gradle, которые предоставят множество необходимых вам настраиваемых типов задач.
Как всегда, фрагменты кода доступны на Github.