Gradle: разделить конфигурацию репозитория между settings.gradle.kts и buildSrc / build.gradle.kts - PullRequest
4 голосов
/ 05 марта 2020

Существует многомодульный проект Gradle 6.X, использующий Kotlin DSL. Функция buildSrc используется для управления версиями зависимостей в центральном месте. Нечто похожее на описанный подход здесь .

В проекте для загрузки зависимостей используется внутренний сервер. Это вызывает дублирование конфигурации настроек репозитория в двух местах:

buildSrc/build.gradle.kts:

plugins {
    `kotlin-dsl`
}

repositories {
    // The org.jetbrains.kotlin.jvm plugin requires a repository
    // where to download the Kotlin compiler dependencies from.
    maven {
        url = uri("${extra.properties["custom.url"] as? String}")
        credentials() {
            username = extra.properties["custom.username"] as? String
            password = extra.properties["custom.password"] as? String
        }
    }
}

и root settings.gradle.kts:

...
gradle.projectsLoaded {
    allprojects {
        repositories {
            maven {
                url = uri("${extra.properties["custom.url"] as? String}")
                credentials() {
                    username = extra.properties["custom.username"] as? String
                    password = extra.properties["custom.password"] as? String
                }
            }
        }
    }
}
...

Возможно ли как-то разделить дублированный блок maven между этими двумя местами?

1 Ответ

5 голосов
/ 25 апреля 2020

Вы можете попробовать рефакторинг вашего kts файла во что-то вроде этого. Вам это поможет?

repositories.gradle.kts:

repositories {
            maven {
                url = uri("${extra.properties["custom.url"] as? String}")
                credentials() {
                    username = extra.properties["custom.username"] as? String
                    password = extra.properties["custom.password"] as? String
                }
            }
        }

buildSrc/build.gradle.kts

plugins {
    `kotlin-dsl`
}
apply(from="../repositories.gradle.kts")

settings.gradle.kts

gradle.projectsLoaded {
    allprojects {
        apply(from = "repositories.gradle.kts")
    }
}
...