Перейти до вмісту

Gradle

Матеріал з K2 ERP Wiki

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 підтримує роботу інкрементальну збірку.; Один репозиторій має змогу містити один проєкт або багато підпроєктів.;
Показати дерево залежностей.; Android-документація додатково пояснює, що build system перетворює вихідний код на виконуваний застосунок, а Gradle організовує ці дії через задачі.;</syntaxhighlight>Показати доступні задачі.; істотно: Gradle — це не мова програмування, а інструмент збірки.; # IDE імпортує Gradle-проєкт.; Типові репозиторії:

Джерела

core/
  1. Розробник клонує репозиторій.; Він керує процесом збірки й викликає потрібні інструменти: компілятор, тестовий фреймворк, пакувальник, плагіни та інші задачі.; }

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>
завдяки наявності
Gradle Wrapper завантажує потрібну версію Gradle, яка вказана в проєкті.; implementation("org.springframework.boot:spring-boot-starter-web")

./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.