[Android]Gradle에서 Dependabet을 사용할 때의 Tips
7524 단어 AndroidGradledependabottech
Dependabet
Dependabot는 프로그램 라이브러리의 업데이트 작업을 자동화하는bot으로 GiitHub에 통합되었다.창고에 Dependabet을 설치하면 정기적으로 라이브러리 업데이트를 확인하고 향상된 버전의 Pull Request를 제작합니다.
다양한 언어에 대응해 이번에 그래드에서 디펜다봇을 활용할 때 생기는 과제와 해법을 소개한다.제목에 안드로이드라고 쓰여 있는데 그레이드 자바 프로젝트라면 같은 일을 할 수 있을 것 같다.
과제.
특히 안드로이드가 많아 라이브러리가 비대해지지 않도록 한 라이브러리를 여러 개의 위상으로 나눠 필요한 기능만 제공하는 경우도 있다.예를 들어 AndroidX Lifecycle에서 가져온 예의 코드는 다음과 같다.
dependencies {
def lifecycle_version = "2.2.0"
def arch_version = "2.1.0"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
// Lifecycles only (without ViewModel or LiveData)
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
// Saved state module for ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"
// Annotation processor
kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
// alternately - if using Java8, use the following instead of lifecycle-compiler
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
// optional - helpers for implementing LifecycleOwner in a Service
implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"
// optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"
// optional - ReactiveStreams support for LiveData
implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version"
// optional - Test helpers for LiveData
testImplementation "androidx.arch.core:core-testing:$arch_version"
}
만약 이러한 공통 버전의 여러 개의 분할 위상이 있다면 버전을 변수에 잘라서 사용하는 것은 프로그래머의 당연한 방법이다.그러나 Dependabbot에서 이렇게 버전을 변수로 잘라내면 제대로 작동하지 않습니다.Gradle의 스크립트를 실행하는 것이 아니라 문자열
"androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
을 검사하는 방법입니다.(주) 버전 정보를 다른gradle 파일로 잘라서 순조롭게 진행되는 기사도 봤지만 제가 옆에서 시도해 봤는데 조작이 안 됐어요.이렇게 하면 돼요. 메시지가 있으면 댓글로 남겨주세요.
그렇다면 "어차피 자동으로 다시 써서 홍보를 할 수 있다면 변수는 언급하지 않아도 되겠지"라고 이렇게 쓰면 4개의 PR 업데이트를 제대로 할 수 있다.
dependencies {
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0"
implementation "androidx.lifecycle:lifecycle-common-java8:2.2.0"
}
하나의 PR을 통합하는 단계에서 다른 PR 충돌의 비극이 발생한다.디펜다봇은 지아이허브의 PR@dependabot rebase
에도 자동 회신 기능이 있지만, 하나하나의 PR에 대한 수동 리뷰를 하면 자동화의 의미가 약해진다.해결책
이 과제를 해결해야 한다
사실 그레이드
implementation
등의 방법은 Dependency
형의 대상을 되돌려 버전 정보를 포함하는 것이다.따라서 다음과 같은 추출 버전의 조수 방법을 만들어 변수에 넣으면 된다.static String captureVersion(Dependency dependency) {
return dependency.version
}
dependencies {
def lifecycle_version = captureVersion(implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"))
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
}
끝말
이 기사는 Gradlex Dependabet을 더욱 잘 활용하기 위한 Tips를 소개했다.Android의 프로그램 라이브러리는 매우 빨리 업데이트됩니다. 이 방법을 가져온 후 Developer Experience가 많이 향상되었습니다. 꼭 시도해 보십시오.
Reference
이 문제에 관하여([Android]Gradle에서 Dependabet을 사용할 때의 Tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kkagurazaka/articles/a4a0943fa17ab3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)