안드로이드 프로젝트에서 개발에 필요한 플러그인/라이브러리를 다운로드할 원격 저장소를 repositories에 정의합니다.
// New Project시에 생성되는 settings.gradle.kts 모습
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
includeGroup/excludeGroup 등을 추가로 정의하면 repositories의 코드가 길어집니다.
게다가 최근에는 buildSrc/build-logic 등에서 추가로 settings.gradle을 정의하는 케이스도 생겨나서, 더욱 관리할 코드가 늘어나게 됩니다.
// repositories.gradle.kts
val configureSharedRepositories : RepositoryHandler.() -> Unit = {
google {
content {
// includeGroup/excludeGroup 관련 선언
}
}
mavenCentral()
}
extra["configureSharedRepositories"] = configureSharedRepositories
// 별도 정의한 repositories.gradle.kts를 적용한 settings.gradle.kts
pluginManagement {
...
apply("repositories.gradle.kts")
repositories {
gradlePluginPortal()
val configureSharedRepositories = extra["configureSharedRepositories"] as RepositoryHandler.() -> Unit
configureSharedRepositories(this)
}
}
dependencyResolutionManagement {
...
apply("repositories.gradle.kts")
val configureSharedRepositories = extra["configureSharedRepositories"] as RepositoryHandler.() -> Unit
configureSharedRepositories(repositories)
}
org.codehaus.groovy.runtime.MethodClosure
로 타입을 변환하면 됩니다.// repositories.gradle
def configureSharedRepositories(RepositoryHandler handler) {
handler.google {
content {
// includeGroup/excludeGroup 관련 선언
}
}
handler.mavenCentral()
}
ext.configureSharedRepositories = this.&configureSharedRepositories
// 별도 정의한 repositories.gradle를 적용한 settings.gradle
pluginManagement {
...
apply from: "repositories.gradle"
repositories {
gradlePluginPortal()
settings.ext.configureSharedRepositories(it)
}
}
dependencyResolutionManagement {
...
apply from: "repositories.gradle"
settings.ext.configureSharedRepositories(repositories)
}
Nexus 사용 및 includeGroup/excludeGroup과 같은 선언이 있다면, 정의가 여러 곳에 정의하면 관리 이슈 및 복잡해지므로 나누는 것을 권장합니다.
comments powered by Disqus
Subscribe to this blog via RSS.
LazyColumn/Row에서 동일한 Key를 사용하면 크래시가 발생하는 이유
Posted on 30 Nov 2024