Gradle

Gradle
Логотип программы Gradle
Тип система сборки[вд]
Разработчики Gradle Inc.[вд], Adam Murdoch[вд][3], Daz DeBoer[вд][4] и Bo Zhang[вд][4]
Написана на Java, Groovy[5][6] и Kotlin
Операционная система кроссплатформенность
Дата выпуска 2008[1]
Аппаратная платформа Java Virtual Machine
Последняя версия
Репозиторий github.com/gradle/gradle
Состояние активное
Лицензия Apache License 2.0[7]
Сайт 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 [8] - фоновый процесс для ускорения сборки проекта.

Пример проекта для 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.

Примечания

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.