1. Обзор
В этой статье мы расскажем, как создать пользовательскую задачу в Gradle . Мы покажем новое определение задачи с использованием сценария сборки или пользовательского типа задачи.
Ознакомление с Gradle см. в этой статье . Он содержит основы Gradle и, что наиболее важно для этой статьи, введение в задачи Gradle.
2. Пользовательское определение задачи внутри build.gradle
Чтобы создать простую задачу Gradle, нам нужно добавить ее определение в наш файл build.gradle
:
task welcome {
doLast {
println 'Welcome in the ForEach!'
}
}
Основная цель вышеуказанной задачи — просто напечатать текст «Добро пожаловать в ForEach!». Мы можем проверить , доступна ли эта задача , выполнив команду gradle tasks –all
:
gradle tasks --all
Задача находится в списке в группе Другие задачи :
Other tasks
-----------
welcome
Его можно выполнить так же, как и любую другую задачу Gradle:
gradle welcome
Вывод ожидаемый — «Добро пожаловать в ForEach!» сообщение.
Примечание: если опция –all
не установлена, то задачи, относящиеся к категории «Другое», не отображаются. Пользовательская задача Gradle может принадлежать к группе, отличной от «Другое», и может содержать описание.
3. Установите группу и описание
Иногда удобно группировать задачи по функциям, чтобы они были видны в одной категории. Мы можем быстро установить группу для наших пользовательских задач, просто определив свойство группы :
task welcome {
group 'Sample category'
doLast {
println 'Welcome on the ForEach!'
}
}
Теперь, когда мы запустим команду Gradle, чтобы вывести список всех доступных задач ( опция –all
больше не нужна), мы увидим нашу задачу в новой группе:
Sample category tasks
---------------------
welcome
Однако другим также полезно видеть, за что отвечает та или иная задача. Мы можем создать описание , которое содержит краткую информацию:
task welcome {
group 'Sample category'
description 'Tasks which shows a welcome message'
doLast {
println 'Welcome in the ForEach!'
}
}
Когда мы печатаем список доступных задач, вывод будет следующим:
Sample category tasks
---------------------
welcome - Tasks which shows a welcome message
Такой вид определения задачи называется специальным определением .
Более того, полезно создать настраиваемую задачу, определение которой можно использовать повторно. Мы расскажем, как создать задачу из типа и как сделать некоторые настройки доступными для пользователей этой задачи.
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
(как мы сделали выше). Однако, если их больше нескольких, то наша сборка.
gradle становится трудно читать и понимать.
К счастью, Gradle предоставляет для этого несколько решений.
5. Определите тип задачи в папке buildSrc.
Мы можем определить типы задач в папке buildSrc
, которая находится на корневом уровне проекта . Gradle компилирует все, что находится внутри, и добавляет типы в путь к классам, чтобы наш скрипт сборки мог их использовать.
Наш тип задачи, который мы определили ранее ( PrintToolVersionTask
), можно переместить в buildSrc/src/main/groovy/com/foreach/PrintToolVersionTask.groovy
. Нам нужно только добавить некоторые импорты из Gradle API в перемещенный класс .
Мы можем определить неограниченное количество типов задач в папке buildSrc
. Его легче поддерживать, читать, а объявление типа задачи находится не в том же месте, что и инстанцирование задачи.
Мы можем использовать эти типы так же, как мы используем типы, определенные непосредственно в скрипте сборки. Мы должны помнить только о добавлении соответствующего импорта.
6. Определите тип задачи в плагине
Мы можем определить пользовательские типы задач внутри пользовательского плагина Gradle. Пожалуйста, обратитесь к этой статье , в которой описывается, как определить собственный плагин Gradle, определенный в:
- `
файл
build.gradle` папка buildSrc
, как и другие классы Groovy
Эти пользовательские задачи будут доступны для нашей сборки, когда мы определим зависимость от этого плагина. Обратите внимание, что также доступны специальные задачи, а не только настраиваемые типы задач.
7. Заключение
В этом уроке мы рассмотрели, как создать пользовательскую задачу в Gradle. Существует множество доступных плагинов, которые вы можете использовать в своем файле build.gradle
, которые предоставят множество необходимых вам настраиваемых типов задач.
Как всегда, фрагменты кода доступны на Github .