ダメ人間オンライン

あまり信用しないほうがいい技術メモとか備忘録とかその他雑記

build.gradle.kts で良い感じに repositories をまとめたかった

build.gradle.kts のサンプルとかを見てると

buildScript {
    repositories {
        google()
        jcenter()
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

のように書いてるのを良く見るけど repositories に指定するものは一箇所でまとめて書いておきたい。

従来の build.gradle だと

buildScript {
    ext {
        repos = {
            google()
            jcenter()
        }
    }
    repositories repos
}

allprojects {
    repositories repos
}

のように書けた。

build.gradle.kts の場合は

buildScript {
    val repos by extra {
        fun RepositoryHandler.() {
            google()
            jcenter()
        }
    }
    repositories(repos)
}

allprojects {
    val repos: RepositoryHandler.() -> Unit by project
    repositories(repos)
}

とすればよい。

ここで大事なのが

val repos: RepositoryHandler.() -> Unit by project

としてるとこで、

val repos: RepositoryHandler.() -> Unit by extra

とするとダメだった。

rootProject.extra["repos"] となるので by project でやらないといけない。