Gymterview
middle

Как настроить Gradle для работы с Nexus?

Настройка Gradle для Nexus — это конфигурация блоков repositories (откуда скачивать зависимости) и publishing (куда публиковать артефакты) в файле build.gradle или build.gradle.kts.

1. Скачивание зависимостей из Nexus

Пример
repositories {
    maven {
        url 'https://nexus.company.com/repository/maven-public/'
        credentials {
            username = project.findProperty('nexusUser') ?: System.getenv('NEXUS_USER')
            password = project.findProperty('nexusPass') ?: System.getenv('NEXUS_PASS')
        }
        allowInsecureProtocol = false  // Требовать HTTPS
    }
}

Учётные данные берутся из gradle.properties (локальная разработка) или переменных окружения (CI/CD).

2. Публикация артефактов в Nexus

Полный пример конфигурации публикации (build.gradle)
plugins {
    id 'java'
    id 'maven-publish'
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
            groupId = 'com.company'
            artifactId = 'my-service'
            version = '1.0.0'
        }
    }
    repositories {
        maven {
            name = 'nexus'
            def releasesUrl = 'https://nexus.company.com/repository/maven-releases/'
            def snapshotsUrl = 'https://nexus.company.com/repository/maven-snapshots/'
            url = version.endsWith('SNAPSHOT') ? snapshotsUrl : releasesUrl
            credentials {
                username = project.findProperty('nexusUser') ?: System.getenv('NEXUS_USER')
                password = project.findProperty('nexusPass') ?: System.getenv('NEXUS_PASS')
            }
        }
    }
}

3. Файл gradle.properties (только для локальной разработки)

Пример
nexusUser=developer
nexusPass=secret

Важно: этот файл нельзя коммитить в Git! Добавьте его в .gitignore.

4. Kotlin DSL (build.gradle.kts)

Пример
repositories {
    maven {
        url = uri("https://nexus.company.com/repository/maven-public/")
        credentials {
            username = findProperty("nexusUser")?.toString() ?: System.getenv("NEXUS_USER")
            password = findProperty("nexusPass")?.toString() ?: System.getenv("NEXUS_PASS")
        }
    }
}

Сравнение Maven и Gradle в контексте настройки Nexus

Аспект Maven Gradle
Файл учётных данных settings.xml (отдельный файл) gradle.properties или env
Конфигурация загрузки <mirrors> в settings.xml repositories {} в build.gradle
Конфигурация публикации <distributionManagement> в pom.xml publishing {} в build.gradle
Плагин публикации Встроен (mvn deploy) maven-publish
Команда публикации mvn deploy gradle publish

Команда для публикации

Пример
gradle publish -PnexusUser=$NEXUS_USER -PnexusPass=$NEXUS_PASS

Вывод

Настройка Gradle-Nexus проще, чем Maven-Nexus, так как вся конфигурация находится в одном файле (build.gradle). Однако принцип тот же: учётные данные не хранятся в коде, а передаются через свойства проекта или переменные окружения.

На собеседовании: если спрашивают про разницу настройки Maven и Gradle для Nexus, отметьте, что в Maven credentials вынесены в отдельный settings.xml, а в Gradle всё в build.gradle с передачей секретов через properties/env. Оба подхода требуют одного: секреты не в Git.