Сборка Kotlin приложений с использованием Gradle #
Васильев Андрей Михайлович, 2024
Версии презентации
Назначение системы сборки #
Системы сборки появились в тот момент, когда разработчикам перестало хватать одного файла для создания приложения
Для компиляции приложения на Си из двух исходных файлов необходимо выполнить 3 действия: две компиляции и одно связывание
Сборка Java-приложений #
Система сборки обычно работает вместе со средствами компиляции
- Компилятор языка Java,
javac
, входит в состав JDK - Распространённые системы сборки:
- Apache Maven — расширяемая система сборки с конфигурацией на языке XML
- Gradle — система сборки с конфигурацией на языках Kotlin или Groovy
- sbt — система сборки приложений, написанных на языке Scala
- Apache Ant — система сборки с конфигурацией на языке XML
В рамках курса будем использовать Gradle с написанием конфигурации на языке Kotlin
Процесс сборки Kotlin-приложения #
На платформе JVM сборка Kotlin-приложения схожа с классической компиляцией:
Компилятор языка Kotlin не поставляется вместе с JDK, его необходимо дополнительно скачать и иметь в доступе в момент сборки приложения
Хорошая новость — разработчики Kotlin предоставляют инструменты, урпощающие использование в популярных системах сборки: Gradle, Maven и Ant
Расширенная процедура компиляции #
- Пользователь запускает систему сборки с задачей по сборке приложения
- Система сборки загружает конфигурационный файл
- Система сборки загружает расширения, указанные в конфигурационном файле
- Система сборки загружает внешние библиотеки, от которых зависит приложение
- Система сборки выполняет действия по компиляции и сборке приложения
Схема работы Gradle #
Детали работы 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 предоставляет возможность запустить одну или несколько задач
- Каждая задача зависит от других задач и файлов на файловой системе
- Обычно результатом работы задачи является файл на файловой системе
- Система сборки пытается оптимизировать количество действий, чтобы ускорить выполнение задач
Среды разработки с поддержкой 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
содержит кеш для ускорения работы системы сборки