Java for Beginner
695 subscribers
605 photos
165 videos
12 files
938 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Gradle Properties

Gradle поддерживает свойства на разных уровнях, которые используются для настройки сборки.

Project-level:
Определяются в build.gradle или settings.gradle.

Пример:
version = '1.0.0'
ext.myProperty = 'value'


Доступ:
project.version, project.myProperty.


System-level:
Задаются через командную строку (-D) или gradle.properties.
Пример (
gradle.properties):org.gradle.jvmargs=-Xmx2048m

Доступ:
System.getProperty('org.gradle.jvmargs').

Environment-level:
Переменные окружения, доступные через System.getenv().
Пример:println System.getenv('JAVA_HOME')


Приоритет: Свойства командной строки (-D) > gradle.properties > свойства проекта > переменные окружения.
В памяти: Свойства загружаются как часть модели проекта или JVM, требуя минимальных ресурсов. Однако большое количество свойств в gradle.properties увеличивает время парсинга.



Различия Groovy DSL и Kotlin DSL
Groovy DSL
Kotlin DSL



Файл
build.gradle
build.gradle.kts

Типизация
Динамическая
Статическая


Синтаксис
Лаконичный, гибкий
Более строгий, с явными типами


IDE-поддержка
Хорошая, но ограниченное автодополнение
Отличная, с сильным автодополнением


Пример зависимости

implementation 'org.example:lib:1.0'
implementation("org.example:lib:1.0")


Ошибки

Обнаруживаются на этапе выполнения
Обнаруживаются на этапе компиляции


Производительность
Быстрее парсинг, но больше памяти на Groovy
Медленнее парсинг, но меньше ошибок


В памяти: Kotlin DSL требует загрузки Kotlin-библиотек, что увеличивает потребление памяти на 50-100 МБ по сравнению с Groovy. Однако статическая типизация снижает вероятность ошибок, что может уменьшить затраты на отладку.


Рекомендации:

Используйте Groovy для простых проектов или совместимости с существующими скриптами.
Выберите Kotlin для новых проектов, особенно если команда использует Kotlin или требуется строгая типизация.



#Java #middle #Gradle #Build_gradle
👍3
Распределение конфигурации: build.gradle, settings.gradle, gradle.properties

build.gradle:
Содержит конфигурацию сборки: плагины, зависимости, задачи.
Один файл на модуль в многомодульных проектах.
Роль: Определяет, как собирать проект или модуль.


В памяти: Парсится в модель проекта, включая DAG задач и граф зависимостей.


settings.gradle:
Определяет структуру проекта: корневое имя, подмодули, настройки кэширования.

Пример:

rootProject.name = 'my-project'
include 'module-api', 'module-core'


Роль: Управляет инициализацией многомодульного проекта.


В памяти: Загружается первым, формируя модель проекта и граф модулей. Меньше по объему, чем build.gradle.


gradle.properties:
Хранит свойства для настройки Gradle, JVM и проекта.
Пример:

org.gradle.parallel=true
myVersion=1.0.0


Роль: Централизует глобальные настройки, доступные всем модулям.


В памяти: Загружается как часть конфигурации Gradle, минимально влияя на память.


Распределение конфигурации:
Общие настройки: Храните в gradle.properties (например, JVM-аргументы, версии).
Структура проекта: Определяйте в settings.gradle (модули, кэш).
Логика сборки: Описывайте в build.gradle (задачи, зависимости).


Нюансы:
Для многомодульных проектов используйте allprojects или subprojects в build.gradle для общих настроек:
allprojects {
repositories {
mavenCentral()
}
}


Храните чувствительные данные (например, ключи API) в ~/.gradle/
gradle.properties с ограниченными правами доступа.

В памяти: Конфигурационные файлы загружаются последовательно: gradle.properties → settings.gradle → build.gradle. Gradle кэширует результаты парсинга в ~/.gradle/caches, снижая overhead при повторных сборках.
Нюансы и внутренние механизмы


Управление памятью:
Gradle загружает модель проекта, задачи и зависимости в JVM. Для крупных проектов с сотнями задач и зависимостей потребление памяти может достигать 1-2 ГБ.
Groovy/Kotlin DSL увеличивают overhead из-за динамической/статической компиляции.
Gradle Daemon сохраняет JVM между сборками, ускоряя выполнение, но увеличивая базовое потребление памяти (около 200-300 МБ).
Оптимизируйте с помощью org.gradle.jvmargs=-Xmx2048m и --no-daemon для одноразовых сборок.


Кэширование:

Локальный кэш (~/.gradle/caches) хранит зависимости, плагины и результаты задач, снижая сетевые запросы.
Build Cache (локальный или удаленный) минимизирует повторные вычисления, но требует настройки и дискового пространства.
Очистка кэша: ./gradlew --stop и rm -rf ~/.gradle/caches.


Производительность:
Инкрементальная сборка пропускает неизмененные задачи, проверяя хэши входных/выходных данных.
Параллельное выполнение (--parallel) ускоряет многомодульные проекты, но увеличивает пиковое потребление памяти.
Используйте --configure-on-demand для сокращения времени конфигурации.


Отладка:
Флаг --info или --debug выводит подробные логи:./gradlew build --debug
Используйте ./gradlew tasks для списка задач или ./gradlew dependencies для анализа зависимостей.
Build Scans предоставляют визуальный анализ сборки.


Многомодульные проекты:
Gradle эффективно управляет модулями через settings.gradle, строя DAG для определения порядка сборки.
Выполняйте задачи для конкретного модуля: ./gradlew :module-name:build.


Совместимость:
Gradle требует JDK 8+ (рекомендуется 11+). Убедитесь, что JAVA_HOME указывает на правильный JDK.
Некоторые Maven-плагины требуют аналогов в Gradle (например, nebula-release-plugin вместо maven-release-plugin).



#Java #middle #Gradle #Build_gradle
👍4