Gradle
Gradle | |
Информация | |
---|---|
Разработчик | Hans Dockter, Adam Murdoch, Szczepan Faber, Peter Niederwieser, Luke Daley, Rene Gröschke, Daz DeBoer, Steve Appling |
Последна версия | 1.6[1] |
Програмен език | Java, Groovy |
Операционна система | мултиплатформен |
Статус | активен |
Вид софтуер | Приложение за билдване |
Лиценз | Apache License 2.0 |
Уебсайт | www.gradle.org |
Gradle в Общомедия |
Gradle е приложение за автоматизиране на проектите, чиято цел е да сглоби (build) даден проект, използвайки концепциите на Apache Ant и Apache Maven, като също така добавя и предметно ориентиран език базиран на Groovy и Kotlin вместо традиционния и широко използван XML формат за деклариране на конфигурациите към проекта.
За разлика от Apache Maven, който дефинира жизнен цикъл и Apache Ant, където редът на изпълнение на задачите (targets) се определя от зависимости (depends-on), Gradle си служи с директен ацикличен граф (DAG), за да се установи реда, в който отделните задачи (tasks) ще бъдат изпълнени.
Gradle е проектиран за проекти, които се състоят от много билдове (multi-project builds), чиято големина може да се увеличи с времето и да станат значителни по обем и времеемки за сглобяване всеки път наново. Поради тази причина той поддържа инкрементални (incremental) билдове. Чрез интелигентно установяване кои части от дървото на билда не са променяни, Gradle съкращава значително времето за билдване, тъй като задачите, които зависят от тях няма нужда да бъдат изпълнявани отново, тъй като де факто кодът за тях не е променян.
Първоначалните плъгини, които предоставя Gradle са фокусирани около Java, Groovy и Scala езици за програмиране.
Пример за Java проект
[редактиране | редактиране на кода]В примера предполагаме, че се използва директорийната структура на Apache Maven, която се използва за Java код и ресурси. Тези директории са: src/main/java, src/main/resources, src/test/java и src/test/resources.
build.gradle
apply plugin: 'java'
Изпълнявайки gradle build, резултата, който ще получим е
> gradle build
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build
BUILD SUCCESSFUL
Плъгинът за Java емулира много от приложените в Maven жизнени цикли като задачи в ацикличния граф на зависимостите. Тези задачи са зависими по вход и изход една от друга. Например задачата build зависи от изхода на задачите check и assemble. Освен това, check зависи от test, и assemble зависи от jar.
За проекти, които не спазват конвенциите на Maven, Gradle дава възможност структурата на директориите да бъде допълнително конфигурирана. В следващия пример проекта ще съхранява файловете със сорс кода си в src/java, а не в src/main/java както е по конвенцията на Maven.
build.gradle
apply plugin: 'java'
sourceSets.main.java.srcDirs = ['src/java']
Задачи (Tasks)
[редактиране | редактиране на кода]Една от основните концепции в Gradle са задачите(tasks).
Подразбиращи се задачи
[редактиране | редактиране на кода]Gradle има няколко вградени задачи, които може да изпълни, за да ги видим заедно с дефинираните от нас задачи трябва да изпълни:
gradle -q tasks
Резултатът от изпълнението на командата е:
hello-world $gradle -q tasks
-----------------------------------------------------
All tasks runnable from root project
-----------------------------------------------------
Help tasks
----------
dependencies – Displays the dependencies of root project 'hello-world'.
help – Displays a help message
projects – Displays the sub-projects of root project 'hello-world'.
properties – Displays the properties of root project 'hello-world'.
tasks – Displays the tasks runnable from root project 'hello-world'
(some of the displayed tasks may belong to subprojects).
Other tasks
-----------
helloWorld
To see all tasks and more detail, run with --all.
Където в Other tasks се листват дефинираните от нас задачи, ако предварително не сме конфигурирали група, в която да участват.
Дефиниране на задачи
[редактиране | редактиране на кода]Всеки проект се състои от една или повече задачи, които изпълняват различни действия (actions), така че задачите се изграждат от действия. Тези действия се изпълняват, когато дадената задача се изпълнява. Gradle дава възможност да се добавят действия по няколко начина.
Може да се използва doFirst и doLast методите, за да се добави действие към дадена задача или може да се използва оператора за ляво отместване (<<) като еквивалентен на doLast метода. С doLast метода и с оператора за ляво отместване (<<) ние можем да добавяме действия към края на дадена задача, докато с doFirst, към началото.
task first {
doFirst {
println 'begin'
}
doLast {
println 'middle'
}
}
first << {
println 'end'
}
И съответно резултатът от изпълнението ще бъде:
>gradle first
:first
begin
middle
end
Съществуват и други различни начини за дефиниране на задачи – един от тях е използването на string стойност като име, за да дефинираме нова задача
task 'first' << {
println 'This is my first task'
}
Описание на задача
[редактиране | редактиране на кода]За да добавим допълнителна информация към нашата задача, н.р. описание на нейното действие може да използваме свойството на всяка една задача – description. Стойността на това свойство се използва от Gradle задачата tasks. За да добавим описание към нашата задача трябва да направим следното:
task first {
description = 'This is my first task'
}
или еквивалентното
task first(description: 'This is my first task') << {
println 'first'
}
Сега след като изпълним задачата tasks ще получим
$ gradle tasks --all
...
Other tasks
-----------
first – This is my first task
...
Групиране на задачи
[редактиране | редактиране на кода]Gradle също така позволява и групирането на няколко задачи в групи чрез използването на свойството group. Група от задачи е множество от задачи, които са свързани логически едни с други. Тези групи от задачи се използват, например при изхода на задачата tasks.
task first {
description = 'This is my first task'
group = 'MyGroup'
}
Сега ако отново изпълним задачата tasks ще получим
$ gradle tasks --all
...
MyGroup tasks
-----------
first – This is my first task
...