Каковы преимущества Gradle и как выглядит базовая конфигурация?

«Каковы преимущества Gradle и как выглядит базовая конфигурация?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Gradle — это современный инструмент автоматизации сборки, использующий Groovy или Kotlin DSL. Его ключевые преимущества — производительность, гибкость и выразительность скриптов.

Основные преимущества:

  • Высокая производительность: Инкрементальные сборки, кэширование на уровне задач, параллельное выполнение.
  • Универсальность: Поддержка множества языков (Java, Kotlin, C++, Python) и экосистем через плагины.
  • Выразительный DSL: Скрипты сборки более читаемы и компактны по сравнению с XML (Maven).
  • Расширяемость: Возможность создания пользовательских задач и плагинов.

Пример базового build.gradle.kts для Spring Boot приложения (Kotlin DSL):

plugins {
    java
    id("org.springframework.boot") version "3.1.0"
    id("io.spring.dependency-management") version "1.1.0"
}

group = "com.example"
version = "1.0.0"

java {
    sourceCompatibility = JavaVersion.VERSION_17
}

repositories {
    mavenCentral() // Зависимости загружаются из Maven Central
}

dependencies {
    // Spring Boot Starters
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")

    // База данных (Runtime зависимость)
    runtimeOnly("org.postgresql:postgresql")

    // Тестирование
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}

tasks.withType<Test> {
    useJUnitPlatform() // Использование JUnit 5
}

Ключевые особенности конфигурации:

  • Блок plugins подключает основные плагины.
  • Блок dependencies декларативно описывает зависимости. Gradle автоматически разрешает их транзитивные зависимости.
  • Инкрементальные задачи: Gradle выполняет только те задачи, входные данные которых изменились.
  • Совместимость: Легко работает с артефактами из Maven-репозиториев и может генерировать M-совместимые публикации (maven-publish plugin).