Gradle

Материал из Википедии ? свободной энциклопедии
Перейти к навигации Перейти к поиску
Gradle
Логотип программы Gradle
Тип система сборки [вд]
Разработчики Gradle Inc. [вд] , Adam Murdoch [вд] [3] , Daz DeBoer [вд] [4] и Bo Zhang [вд] [4]
Написана на Java , Groovy [5] и Kotlin
Операционная система кроссплатформенность
Первый выпуск 2008 [1]
Аппаратная платформа Java Virtual Machine
Последняя версия
Репозиторий github.com/gradle/gradle
Состояние активное
Лицензия Apache License 2.0 [6]
Сайт gradle.org   (англ.)
Логотип Викисклада  Медиафайлы на Викискладе

Gradle  ? система автоматической сборки , построенная на принципах Apache Ant и Apache Maven , но предоставляющая DSL на языках Groovy и Kotlin вместо традиционной XML -образной формы представления конфигурации проекта.

В отличие от Apache Maven , основанного на концепции жизненного цикла проекта, и Apache Ant , в котором порядок выполнения задач (targets) определяется отношениями зависимости (depends-on), Gradle использует направленный ациклический граф для определения порядка выполнения задач.

Gradle был разработан для расширяемых многопроектных сборок, и поддерживает каскадную (waterfall) модель разработки , определяя, какие компоненты дерева сборки не изменились и какие задачи, зависимые от этих частей, не требуют перезапуска.

Основные плагины предназначены для разработки и развертывания Java , Groovy и Scala приложений, но есть плагины для других языков программирования : C++ , Swift , Kotlin а также Spring -проект с помощью Spring Boot.

Имеет свой собственный Gradle Daemon [7] - фоновый процесс для ускорения сборки проекта.

Пример проекта для Java

[ править | править код ]

Рассмотрим пример проекта, в котором используется стандартная структура каталогов Maven для исходных кодов и ресурсов.

Такая структура включает в себя следующие каталоги:

  • src/main/java,
  • src/main/resources,
  • src/test/java,
  • src/test/resources.
  1. Создаем эти файлы java-проекта через запуск команды в каталоге проекта: gradle init
  2. Выбираем "Тип проекта" : application - вводим 2
  3. Выбираем "Язык проекта" : java - вводим 3
  4. Совместный проект или разделенный - вводим 1
  5. Выбираем "Язык DSL" : groovy - вводим 1
  6. Выбираем "тестовый фреймворк проекта" : JUnit 4 - вводим 1
  7. Вводим название проекта и пакета(на пример: mainProject).

Всё! Проект создан и теперь его можно открыть в любой IDE и работать непосредственно со сформированными каталогами и файлами.

Найдём сборочный файл Gradle нашего проекта по пути /app/build.gradle:

plugins
 {

    // Apply the application plugin to add support for building a CLI application in Java.

    id
 'application'

}


repositories
 {

    // Use Maven Central for resolving dependencies.

    mavenCentral
()

}


dependencies
 {

    // Use JUnit test framework.

    testImplementation
 'junit:junit:4.13.1'


    // This dependency is used by the application.

    implementation
 'com.google.guava:guava:30.0-jre'

}


application
 {

    // Define the main class for the application.

    mainClass
 =
 'mainProject.App'

}

Соберем проект через команду gradle build:

> gradle build
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build

BUILD SUCCESSFUL

Готовый jar-файл будет лежать в /app/build/libs: app.jar

Очистим собранные файлы командой: gradle clean

Чтобы выполнить этот jar-файл из командной строки, добавим в файл build.gradle эти строки (версию java и наш Main-class):

java
 {

	sourceCompatibility
 =
 JavaVersion
.
VERSION_1_8

	targetCompatibility
 =
 JavaVersion
.
VERSION_1_8

}

jar
 {

  manifest
 {

    attributes
(

      'Main-Class'
:
 'mainProject.App'

    )

  }

}

Снова собираем проект командой gradle build -> переходим в каталог /app/build/libs и набираем: java -cp . -jar app.jar

Мы должны увидеть приветствие "Hello, World!".

Жизненный цикл задач в Gradle

[ править | править код ]

Посмотреть все задачи можно через команду: gradle tasks

Посмотреть все зависимости дочернего проекта app можно через команду: gradle app:dependencies

Java плагин эмулирует жизненные циклы Maven , в виде задач в направленном ациклическом графе зависимостей для входов и выходов каждой задачи. В этом примере выполнение задачи build зависит от результата выполнения задач check и assemble . Также задача check зависит от test , а assemble от jar .

Gradle также позволяет использовать для проектов структуру каталогов, отличающуюся от конвенции Maven . В следующем примере будет рассмотрен проект, в котором исходный код находится в каталоге src/java , а не в src/main/java .

build.gradle

apply
 plugin:
 'java'


sourceSets
 {

    main
 {

        java
 {

            srcDirs
 =
 [
'src/java'
]

        }

    }

}


Мультипроектная сборка

[ править | править код ]

Для приложений, состоящих из модулей, удобно использовать мультипроектный подход Gradle:

  1. Каждый модуль расположен в своей отдельной директории.
  2. Каждый модуль может включать дочерние, которые будут расположены во вложенных директориях.
  3. Описание мультипроектной структуры выполняется в settings.gradle в корневой директории проекта.
  4. В корневой директории проекта есть build.gradle, который может настраивать себя и дочерние модули.
  5. Каждый дочерний модуль может иметь такие же два файла для настройки себя и своих дочерних модулей.
  6. Такой подход позволяет удобно запускать задачи для конкретных модулей или всего проекта в целом.

Основные задачи

[ править | править код ]

- Выполнение задач на этапе сборки ( тестирование, отчеты, логирование и т.д / походы в (сеть | сервисы), в общем, все, что умеет любое приложение )

- Сборка зависимых библиотек проекта для билда, распределение степени доступа (как модификаторы доступа в языках программирования) внутри исполняющегося кода

Основная структура build.gradle файла

[ править | править код ]
app
/
build
.
gradle
.
kts


// Блок, отвечающий за подключение плагинов

plugins
 {

    id
(
"org.jetbrains.kotlin.jvm"
)
 version
 "1.4.31"
  

    application
 
}


// Основные репозитории, из которых скачиваются плагины 

repositories
 {

    mavenCentral
()
 
}


// Зависимости для вашего проекта 

dependencies
 {

    implementation
(
platform
(
"org.jetbrains.kotlin:kotlin-bom"
))
 // пример подключения плагина в ваш проект


    implementation
(
"org.jetbrains.kotlin:kotlin-stdlib-jdk8"
)
 

    implementation
(
"com.google.guava:guava:30.1-jre"
)
 

    testImplementation
(
"org.jetbrains.kotlin:kotlin-test"
)
 

    testImplementation
(
"org.jetbrains.kotlin:kotlin-test-junit"
)
 
}


// Основной класс для запуска программы 

application
 {

    mainClass
.
set
(
"demo.AppKt"
)
 
}

Литература

[ править | править код ]
  • Muschko, B. and Dockter, H. Gradle in Action. ? Manning Publications Company, 2013. ? 456 p. ? ISBN 9781617291302 .
  • Berglund, T. Gradle Beyond the Basics. ? O'Reilly Media, 2013. ? 80 p. ? ISBN 9781449373825 .
  • Berglund, T. and McCullough, M. Building and Testing with Gradle. ? O'Reilly Media, 2011. ? 110 p. ? ISBN 9781449304638 .
  • Kousen, K. Gradle for Android. ? O'Reilly Media, Incorporated, 2015. ? 120 p. ? ISBN 9781491947029 .
  • Ikkink, H. K. Gradle Effective Implementation Guide . ? Packt Publishing, 2012. ? 350 p. ? ISBN 9781849518116 .

Примечания

[ править | править код ]