Сборка Kotlin приложений с использованием Gradle #

Васильев Андрей Михайлович, 2024

Версии презентации

Назначение системы сборки #

Системы сборки появились в тот момент, когда разработчикам перестало хватать одного файла для создания приложения

Для компиляции приложения на Си из двух исходных файлов необходимо выполнить 3 действия: две компиляции и одно связывание

diagram

Сборка Java-приложений #

Система сборки обычно работает вместе со средствами компиляции

  • Компилятор языка Java, javac, входит в состав JDK
  • Распространённые системы сборки:
    • Apache Maven — расширяемая система сборки с конфигурацией на языке XML
    • Gradle — система сборки с конфигурацией на языках Kotlin или Groovy
    • sbt — система сборки приложений, написанных на языке Scala
    • Apache Ant — система сборки с конфигурацией на языке XML

В рамках курса будем использовать Gradle с написанием конфигурации на языке Kotlin

Процесс сборки Kotlin-приложения #

На платформе JVM сборка Kotlin-приложения схожа с классической компиляцией:

diagram

Компилятор языка Kotlin не поставляется вместе с JDK, его необходимо дополнительно скачать и иметь в доступе в момент сборки приложения

Хорошая новость — разработчики Kotlin предоставляют инструменты, урпощающие использование в популярных системах сборки: Gradle, Maven и Ant

Расширенная процедура компиляции #

  1. Пользователь запускает систему сборки с задачей по сборке приложения
  2. Система сборки загружает конфигурационный файл
  3. Система сборки загружает расширения, указанные в конфигурационном файле
  4. Система сборки загружает внешние библиотеки, от которых зависит приложение
  5. Система сборки выполняет действия по компиляции и сборке приложения

Схема работы Gradle #

diagram

Детали работы Gradle #

Структура проекта должна следовать стандарту

project
├── gradle                              
│   ├── libs.versions.toml              
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew                             
├── gradlew.bat                         
├── settings.gradle(.kts)               
├── subproject-a
│   ├── build.gradle(.kts)              
│   └── src                             
└── subproject-b
    ├── build.gradle(.kts)              
    └── src                             
  • В коре проекта находится файл settings.gradle(.kts)
  • Скрипты gradlew и gradlew.bat облегчают установку gradle
  • Каталог gradle содержит информацию по доп. настройке
  • Файл libs.versions.toml содержит список стандартных зависимостей
  • Каталоги subproject-a и subproject-b содержит вложенные проекты
  • Файлы subproject-a/build.gradle(.kts) содержит конфигурацию проекта

Логическая модель Gradle #

С точки зрения пользователя Gradle предоставляет возможность запустить одну или несколько задач

diagram

  • Каждая задача зависит от других задач и файлов на файловой системе
  • Обычно результатом работы задачи является файл на файловой системе
  • Система сборки пытается оптимизировать количество действий, чтобы ускорить выполнение задач

Среды разработки с поддержкой IDEA #

  • Основным средством взаимодействия с Gradle выступает командный интерфейс
  • Среды разработки предоставляют средства интеграции

Будем рассматривать интеграцию с IDEA

Структура проекта Gradle с поддержкой Kotlin #

KotlinProject
├── .gradle/
├── build/
├── build.gradle.kts
└── src
    ├── main
    │   ├── kotlin
    │   │   └── Main.kt
    │   └── resources
    └── test
        ├── kotlin
        └── resources
  • В корне проекта находится файл build.gradle.kts
  • Каталог src/main/kotlin содержит исходные коды на языке Kotlin
  • Каталог src/main/resources содержит файлы-ресурсы, не подвергающиеся компиляции
  • В каталоге kotlin можно и нужно создавать иерархическую структуру каталогов, соответствующую пакетам языка Kotlin
  • Каталог build содержит результаты сборки и не должен сохраняться в системе контроля версий
  • Каталог .gradle содержит кеш для ускорения работы системы сборки