Gradle
useJUnitPlatform() Основні задачі Gradle: СОТА
Обмеження та ризики
id 'java'
Gradle і Java
build.gradle.kts
}
gradle.properties
Не плутати: Gradle і Maven виконують схожі задачі, але мають різний підхід до конфігурації.; include("core") </syntaxhighlight>
</syntaxhighlight>
implementation("org.springframework.boot:spring-boot-starter-web")
- джерела залежностей;
- версії бібліотек;
- вразливості залежностей;
- доступ до приватних репозиторіїв;
- токени CI/CD;
- Gradle Wrapper;
- build scripts;
- сторонні плагіни;
- артефакти збірки;
- секрети середовища;
- права доступу до публікації.;
Gradle і Maven
id("org.springframework.boot") version "3.3.0"
додатково Gradle підтримує роботу build cache, який надає можливість повторно використовувати результати попередніх збірок.;=== build.gradle === }
testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
- поділ коду за відповідальністю;
- повторне використання модулів;
- швидша збірка окремих частин;
- окремі залежності для кожного модуля;
- зручніша супровід великих систем;
- можливість ізолювати інтеграційні модулі.; # Запускає збірку через ./gradlew build.;== Основні команди Gradle ==
Gradle має змогу бути корисним для збірки: ./gradlew dependencies
</syntaxhighlight>Очистити результати попередньої збірки.; В Android-проєктах Gradle відповідає за: plugins {
Приклад:
Мінімальний Java-проєкт має змогу мати такий build.gradle.kts:<syntaxhighlight lang="kotlin">
Приклади задач:
!Критерій
org.gradle.caching=true
./gradlew bootRun
org.gradle.parallel=true
Приклад структури:<syntaxhighlight lang="text">
plugins {
}
У контексті K2 ERP Gradle має змогу використовуватися для Java або Kotlin-сервісів, інтеграційних модулів, API, обробки XML, SAF-T UA, ЕДО, ДПС, е-ТТН, РРО/ПРРО та інших технічних компонентів, які потребують стабільної автоматизованої збірки.; # Створює commit.; Gradle описує збірку через DSL і задачі, а Maven — через XML і стандартний життєвий цикл.;
* api;
* core;
* database;
* web;
* mobile;
* integration;
* tests;
* shared.; офіційно затверджений сайт Gradle описує його як open-source build system для Java, Android і Kotlin-розробників.;</div>
testImplementation("org.springframework.boot:spring-boot-starter-test")
api/
{| class="wikitable"
[[Rider]]
== Основні поняття ==
mavenCentral()
== Див.; додатково ==
Замість команди:<syntaxhighlight lang="bash">
Приклад:<syntaxhighlight lang="kotlin">
}
== Безпека Gradle-проєктів ==
як ілюстрація, Java-проєкт має змогу залежати від бібліотек для роботи з JSON, базою даних, HTTP-клієнтом, тестами або логуванням.; Приклад:<syntaxhighlight lang="kotlin">
</div>
* Maven Central;
* Gradle Plugin Portal;
* Google Maven Repository;
* корпоративний Nexus;
* корпоративний Artifactory;
* локальний Maven-репозиторій.; '''build.gradle.kts''' — це файл конфігурації збірки на Kotlin DSL.;== Gradle і Kotlin ==
Типовий Gradle-проєкт має змогу містити такі файли:
* перевірку коду;
* збірку проєкту;
* запуск тестів;
* статичний аналіз;
* створення артефакту;
* публікацію Docker-образу;
* публікацію бібліотеки;
* deployment у тестове середовище.; '''Рекомендація:''' для корпоративних проєктів потрібно контролювати версії залежностей, використовувати lock-файли або version catalog, перевіряти вразливості бібліотек і не зберігати секрети у Gradle-конфігурації.;[[ДПС]]
'''Plugin''' — це розширення, яке додає в проєкт готові задачі, конфігурація та правила.;<syntaxhighlight lang="bash">
./gradlew build
== Для чого потрібен Gradle ==
Запустити тести.; ./gradlew build
} Gradle Wrapper — це механізм запуску Gradle без попереднього ручного встановлення Gradle на комп’ютер розробника.; Це зменшує проблеми, коли в різних розробників або на CI-сервері встановлені різні версії Gradle.; Gradle — це потужний інструмент автоматизації збірки, який застосовується у Java, Kotlin, Android, Spring Boot, багатомодульних і корпоративних проєктах.; :contentReference [oaicite:2]{index=2}
- implementation;
- api;
- compileOnly;
- runtimeOnly;
- testImplementation;
- testRuntimeOnly;
- annotationProcessor.; Android Studio використовує Gradle для компіляції коду, обробки ресурсів, збирання APK або AAB, запуску тестів і підготовки застосунку до публікації.; }
Типові команди:
Запустити Spring Boot-застосунок, якщо застосовується відповідний плагін.; rootProject.name = "k2-integration"
Gradle будує граф задач і виконує їх у правильному порядку.;</syntaxhighlight>переважні аспекти багатомодульної структури: SAF-T UA
Incremental build і build cache
</syntaxhighlight>
Project — це проєкт або компонент, який збирається Gradle.; integration/
Приклад:}
./gradlew clean build
build.gradle.kts
== Файли Gradle-проєкту ==
'''Інтеграційний акцент:''' для backend-сервісів Gradle часто застосовується разом із Spring Boot, Docker, GitHub Actions, GitLab CI, Jenkins або іншими CI/CD-інструментами.; gradlew.bat build
== Gradle у CI/CD ==
[[Java]]
Gradle добре підходить для багатомодульних проєктів.; Це відрізняє його від Maven, де конфігурація традиційно описується у XML-файлі pom.xml.; id("io.spring.dependency-management") version "1.1.5"
Типові конфігурації залежностей:
!Gradle
'''gradle.properties''' застосовується для налаштувань Gradle, JVM, версій або параметрів збірки.; Gradle підтримує роботу інкрементальну збірку.; Один репозиторій має змогу містити один проєкт або багато підпроєктів.;
Джерела
core/
- Розробник клонує репозиторій.; Він керує процесом збірки й викликає потрібні інструменти: компілятор, тестовий фреймворк, пакувальник, плагіни та інші задачі.; }
include("api")
Task — це конкретна дія, яку виконує Gradle.;</syntaxhighlight>або для Windows:=== settings.gradle ===
Gradle функціонує на JVM і підтримує роботу build scripts на Groovy DSL або Kotlin DSL.;<syntaxhighlight lang="bash">
</div>
Приклади плагінів:
build.gradle.kts
* [https://gradle.org/ Gradle Build Tool]
* [https://docs.gradle.org/current/userguide/userguide.html Gradle User Manual]
* [https://github.com/gradle/gradle Gradle на GitHub]
* [https://developer.android.com/build/gradle-build-overview Android Developers: Gradle build overview]
* [https://plugins.gradle.org/ Gradle Plugin Portal]
У build.gradle, gradle.properties або інших файлах проєкту не варто зберігати:
dependencies {
[[M.E.Doc.ЕДО]]
'''build.gradle''' — це файл конфігурації збірки на Groovy DSL.; :contentReference [oaicite:1]{index=1}<div style="background:#fff8e1; border-left:5px solid #f9a825; padding:12px; margin:12px 0;">
include("integration")
[[FREDO]]
}
[[Е-ТТН]]
}
[[Medoc REST API]]
Gradle є собою основним інструментом збірки для Android-проєктів.; testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'
'''Зверніть увагу:''' Gradle часто застосовують, коли потрібно непомітно для користувача IDE.; }
* складність великих build scripts;
* потребу в узгодженні версій плагінів;
* можливі конфлікти залежностей;
* потребу в правильному налаштуванні кешу;
* залежність від мережі при завантаженні залежностей;
* потребу в контролі безпеки бібліотек;
* різницю між Groovy DSL і Kotlin DSL;
* можливі проблеми після актуалізація Gradle або плагінів;
* потребу в дисципліні для багатомодульних проєктів.;
}
repositories {
До основних переваг Gradle можна віднести:
Типовий сценарій роботи розробника
}
Типовий бізнес-процес роботи з Gradle має змогу виглядати так:
Приклад:=== Plugin ===
Gradle часто порівнюють із Maven.; Це користувачі можуть всій команді використовувати однакову версію інструмента.;[[Edin]]
=== build.gradle.kts ===
plugins {
Приклад:<syntaxhighlight lang="kotlin">
!Maven
== Залежності ==
testImplementation("org.junit.jupiter:junit-jupiter")
./gradlew test
Gradle використовує task-based підхід: збірка складається із задач.; Він сприяє керувати залежностями, запускати тести, пакувати застосунки, автоматизувати задачі та інтегрувати збірку з CI/CD.; plugins {
mavenCentral()
repositories {
== Gradle і Android ==
== переважні аспекти Gradle ==
repositories {
Gradle широко застосовується у Java.;<div style="background:#e8f5e9; border-left:5px solid #43a047; padding:12px; margin:12px 0;">
[[Технічне завдання: Редактор BP-моделей K2 ERP]]
</div>
Gradle потрібен для автоматизації процесів розробки.; Достатньо описати залежність у build.gradle або build.gradle.kts, і Gradle сам завантажить потрібну версію з репозиторію.;== Багатомодульні проєкти ==
project-root/
* паролі;
* токени API;
* приватні ключі;
* production-рядки підключення;
* секрети електронного підпису;
* доступи до репозиторіїв;
* персональні інформаційні дані клієнтів;
* ключі доступу до хмарних сервісів.; Окремо варто відзначити Kotlin, Android, Groovy, Scala, C++, Swift і інших проєктах.; У Spring Boot-проєктах Gradle застосовується для підключення Spring Boot Plugin, керування залежностями, запуску застосунку, створення executable JAR і тестування.; # У разі успіху створюється артефакт або виконується deployment.; '''Для K2 ERP:''' Gradle бажано використовувати разом із Gradle Wrapper, єдиними правилами версій, централізованим керуванням залежностями, CI/CD і тестами для критичних інтеграцій.; Kotlin DSL має перевагу в з цієї причини, що дає кращу типізацію, автодоповнення в IDE та зручнішу навігацію для Kotlin/Java-розробників.;</div>
завдяки наявності
./gradlew clean
- Java-сервісів;
- Kotlin-сервісів;
- Spring Boot API;
- інтеграцій з ДПС;
- інтеграцій з ЕДО;
- інтеграцій з Medoc REST API;
- інтеграцій з EDIN;
- інтеграцій з СОТА;
- інтеграцій з FREDO;
- модулів SAF-T UA;
- сервісів е-ТТН;
- сервісів РРО/ПРРО;
- службових CLI-утиліт;
- тестових проєктів.; окрім цього, самі Gradle build scripts можуть писатися на Kotlin DSL.; # Перевіряє результат.;
Під час використання Gradle потрібно враховувати: Для безпечної роботи з Gradle потрібно контролювати: dependencies { Gradle часто застосовується для Kotlin-проєктів.; Gradle керує залежностями через блок dependencies.; # Розробник змінює код.;
- java;
- application;
- java-library;
- org.springframework.boot;
- com.android.application;
- kotlin;
- maven-publish.;=== Project ===
Типовий pipeline має змогу виконувати: Gradle застосовується для опису процесу збірки проєкту.; java
- компіляція коду;
- керування залежностями;
- завантаження бібліотек із репозиторіїв;
- запуск тестів;
- пакування JAR, WAR, APK або інших артефактів;
- запуск статичного аналізу;
- генерація коду;
- публікація артефактів;
- виконання міграцій або службових задач;
- збірка багатомодульних проєктів;
- інтеграційні функціональні можливості з CI/CD;
- автоматизація процесів повторюваних команд.;Інтеграція РРО в Python
implementation("org.postgresql:postgresql")
settings.gradle.kts
dependencies {
google()
|- |Формат конфігурації |Groovy DSL або Kotlin DSL |XML |- |Гнучкість |Вища, можна писати складну логіку збірки |Більше стандартних правил |- |Задачі |Task-based модель |Lifecycle-based модель |- |Багатомодульність |Добре підтримується |Добре підтримується |- |Поширене використання |Java, Kotlin, Android, Spring, багатомодульні проєкти |Java, корпоративні проєкти, бібліотеки |} </syntaxhighlight>Зібрати проєкт і запустити перевірки.; # Запускає тести через IDE або команду ./gradlew test.;</syntaxhighlight>
Технічне завдання: Редактор ER-моделей K2 ERP
Практичне сфера застосування: Gradle надає можливість не завантажувати бібліотеки вручну.;
</syntaxhighlight>
Приклад: useJUnitPlatform()
'''settings.gradle''' або '''settings.gradle.kts''' описує структуру проєкту, назву root-проєкту і підключені модулі.; Він керує тим, як проєкт компілюється, тестується, пакується, запускається і публікується.; '''Dependency''' — це зовнішня бібліотека або компонент, який потрібен проєкту.; :contentReference [oaicite:0]{index=0}<div style="background:#e8f4ff; border-left:5px solid #1e88e5; padding:12px; margin:12px 0;">
gradle build
repositories {
</div>
'''Для командної розробки:''' Gradle Wrapper бажано зберігати в репозиторії.; # CI/CD запускає Gradle-збірку на сервері.; У контексті K2 ERP Gradle має змогу використовуватися для Java або Kotlin-сервісів, інтеграційних модулів, API, конекторів до зовнішніх систем, обробки XML, роботи з електронними документами та допоміжних backend-утиліт.; Це означає, що він має змогу не виконувати повторно задачі, результати яких не змінилися.; repositories {
}
./gradlew tasks
Репозиторій — це місце, звідки Gradle завантажує залежності.;[[Tilda Commerce]]
'''Не плутати:''' Gradle не компілює Java сам по собі як мова або компілятор.; У файлах конфігурації розробник визначає, які плагіни використовуються, з яких репозиторіїв завантажуються залежності, які бібліотеки потрібні проєкту, які задачі потрібно виконати і як саме має збиратися застосунок.; * compileJava;
* test;
* build;
* clean;
* jar;
* bootRun;
* publish;
* dependencies.;<div style="background:#fff3e0; border-left:5px solid #fb8c00; padding:12px; margin:12px 0;">
dependencies {
=== Dependency ===
testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
== Загальний характеристика ==
[[OpenCart]]
useJUnitPlatform()
mavenCentral()
== Репозиторії ==
build.gradle.kts
У Java-проєктах Gradle застосовується для компіляції коду, запуску тестів, пакування JAR і керування залежностями.;<syntaxhighlight lang="bash">
java
mavenCentral()
<div style="background:#ffebee; border-left:5px solid #e53935; padding:12px; margin:12px 0;">
[[SaaS]]
== Висновок ==
* підключення Android Gradle Plugin;
* конфігурація compileSdk;
* конфігурація minSdk;
* конфігурація targetSdk;
* flavors;
* build types;
* signing configs;
* залежності;
* збірку APK;
* збірку AAB;
* запуск тестів.; # Відкриває проєкт в IDE.; Приклад команди для CI:<syntaxhighlight lang="bash">
* гнучку конфігурацію збірки;
* підтримку Groovy DSL і Kotlin DSL;
* хорошу підтримку Java, Kotlin і Android;
* зручність для багатомодульних проєктів;
* інкрементальну збірку;
* build cache;
* велику кількість плагінів;
* інтеграцію з IDE;
* інтеграцію з CI/CD;
* керування залежностями;
* можливість автоматизувати складні сценарії.; include("database")
tasks.test {
Gradle часто застосовується в CI/CD-процесах.; }
}
офіційно затверджений GitHub-репозиторій Gradle описує Gradle як масштабований build automation tool для великих multi-project enterprise builds і задач розробки різними мовами.; це платформа автоматизації збірки програмного забезпечення, яка застосовується; додатково реалізовано керування залежностями, запуску тестів, пакування застосунків, публікації артефактів і автоматизації повторюваних задач розробки виступає ключовою рисою компіляції коду забезпечується через '''Gradle'''.;
mavenCentral()
test { </syntaxhighlight>у проєкті зазвичай використовують:<syntaxhighlight lang="bash"> }
tasks.test {
Task
- build.gradle;
- build.gradle.kts;
- settings.gradle;
- settings.gradle.kts;
- gradle.properties;
- gradlew;
- gradlew.bat;
- каталог gradle/wrapper.;== Gradle і Spring Boot ==
Gradle Wrapper
database/
dependencies { org.gradle.jvmargs=-Xmx2g У багатомодульному проєкті можуть бути окремі модулі:
java
інформаційні дані, які не варто зберігати в Gradle-файлах
Gradle у K2 ERP
build.gradle.kts
Такі інформаційні дані краще передавати через змінні середовища, CI/CD secrets або захищені конфігурації.; як ілюстрація, у Java, Kotlin або Android-проєкті IDE має змогу запускати Gradle автономно під час build, test або run.