Gradle

от Уикипедия, свободната енциклопедия
Направо към: навигация, търсене
Gradle
Official Gradle Logo
Информация
Разработчик 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 е приложение за автоматизиране на проектите, чиято цел е да сголоби(build) даден проект, използвайки концепциите на Apache Ant и Apache Maven, като също така добавя и базиран на езика Groovy - DSL вместо традиционния и широко използван XML формат за деклариране на конфигурациите към проекта.

За разлика от Apache Maven, който дефинира жизнен цикъл и Apache Ant, където редът на изпълнение на задачите(targets) се определя от зависимости (depends-on), Gradle си служи с директен ацикличен граф (DAG), за да се установи реда, в който отделните задачи (tasks) ще бъдат изпълнени.

Gradle е проектиран за проекти, които се състоят от много билдове(multi-project builds), чиято големина може да се учвличи с времето и да станат значителни по обем и времемки за сглобяване всеки път наново. Поради тази причина той поддържа инкрементални(incremental) билдове. Чрез интелигенто установяване кои части от дървото на билда не са променяни, Gradle съкращава значително времето за билдване, тъй като задачите, които зависят от тях няма нужда да бъдат изпълнявани отново, тъй като дефакто кодът за тях не е променян.

Първоначалните плъгини, които предоставя Gradle са фокусирани около Java ,Groovy и Scala езици за програмиране.

Пример за Java проект[редактиране | edit source]

В примера предполагаме, че се изпозлва директорийната структура на Apache Maven, която се изпозлва за Java код и ресурси. Тези директории са: src/main/java, src/main/resources, src/test/java и src/test/resources.

build.gradle

  1. 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

  1. apply plugin: 'java'
    
  2. sourceSets.main.java.srcDirs = ['src/java']
    

Задачи (Tasks)[редактиране | edit source]

Една от основните концепции в Gradle са задачите(tasks).

Подразбиращи се задачи[редактиране | edit source]

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 се листват дефинираните от нас задачи, ако предварително не сме конфигурирали група, в която да участват.

Дефиниране на задачи[редактиране | edit source]

Всеки проект се състои от една или повече задачи, които изпълняват различни действия (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'
}

Описание на задача[редактиране | edit source]

За да добавим допълнителна информация към нашата задача, н.р. описание на нейното действие може да използваме свойството на всяка една задача - 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
...

Групиране на задачи[редактиране | edit source]

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
...

References[редактиране | edit source]