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
![](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Gradle_tasks.jpg/283px-Gradle_tasks.jpg)
Рассмотрим пример проекта, в котором используется стандартная структура каталогов Maven для исходных кодов и ресурсов.
Такая структура включает в себя следующие каталоги:
- src/main/java,
- src/main/resources,
- src/test/java,
- src/test/resources.
- Создаем эти файлы java-проекта через запуск команды в каталоге проекта: gradle init
- Выбираем "Тип проекта" : application - вводим 2
- Выбираем "Язык проекта" : java - вводим 3
- Совместный проект или разделенный - вводим 1
- Выбираем "Язык DSL" : groovy - вводим 1
- Выбираем "тестовый фреймворк проекта" : JUnit 4 - вводим 1
- Вводим название проекта и пакета(на пример: 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:
- Каждый модуль расположен в своей отдельной директории.
- Каждый модуль может включать дочерние, которые будут расположены во вложенных директориях.
- Описание мультипроектной структуры выполняется в settings.gradle в корневой директории проекта.
- В корневой директории проекта есть build.gradle, который может настраивать себя и дочерние модули.
- Каждый дочерний модуль может иметь такие же два файла для настройки себя и своих дочерних модулей.
- Такой подход позволяет удобно запускать задачи для конкретных модулей или всего проекта в целом.
Основные задачи
- Выполнение задач на этапе сборки (тестирование, отчеты, логирование и т.д / походы в (сеть | сервисы), в общем, все, что умеет любое приложение)
- Сборка зависимых библиотек проекта для билда, распределение степени доступа (как модификаторы доступа в языках программирования) внутри исполняющегося кода
Основная структура 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.
Примечания
- ↑ https://gradle.com/our-story/
- ↑ https://github.com/gradle/gradle/releases/tag/v8.2.1
- ↑ https://github.com/gradle/gradle/graphs/contributors?from=2008-03-09&to=2023-01-25&type=c
- ↑ 1 2 https://github.com/gradle/gradle/graphs/contributors?from=2008-03-09&to=2023-01-25&type=a
- ↑ The gradle Open Source Project on Open Hub: Languages Page — 2006.
- ↑ The gradle Open Source Project on Open Hub: Licenses Page — 2006.
- ↑ https://docs.gradle.org/current/userguide/gradle_daemon.html Архивная копия от 1 ноября 2021 на Wayback Machine