Gradle:在 settings.gradle.kts 和 buildSrc/build.gradle.kts 之间共享存储库配置

yup*_*flu 6 gradle gradle-kotlin-dsl

有一个使用 Kotlin DSL 的 Gradle 6.X 多模块项目。 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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

和根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
                }
            }
        }
    }
}
...
Run Code Online (Sandbox Code Playgroud)

是否有可能以某种方式maven在这两个地方之间共享重复的块?

aft*_*ner 7

您可以尝试将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
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

buildSrc/build.gradle.kts

plugins {
    `kotlin-dsl`
}
apply(from="../repositories.gradle.kts")
Run Code Online (Sandbox Code Playgroud)

settings.gradle.kts

gradle.projectsLoaded {
    allprojects {
        apply(from = "repositories.gradle.kts")
    }
}
Run Code Online (Sandbox Code Playgroud)