Gradle에서 저장소 아티팩트를 허용 목록에 추가하기 위한 빠른 가이드
배경
일반적인
build.gradle
파일은 다음과 유사한 방식으로 리포지토리를 나열합니다.repositories {
google()
mavenCentral()
}
이것은 우리가 사용하는 종속성을 위의 리포지토리 중 하나에서 가져와야 함을 지정하는 빠른 방법입니다.
이 접근 방식에는 몇 가지 잠재적인 문제가 있습니다.
더 나은 방법
몇 년 전 Gradle은 각 종속 항목의 정확한 위치를 지정할 수 있는 기능을 추가했습니다.
이러한 API에는
includeModule
, includeGroup
, includeGroupByRegex
가 포함됩니다.좋은 소식은 이러한 API로 점진적으로 마이그레이션하고 종속성 해결을 즉시 더 안전하고 빠르게 만들 수 있다는 것입니다.
첫 번째 접근
가장 쉬운 방법은 각 저장소를
includeGroupByRegex
항목 세트로 바꾸는 것입니다.우리 프로젝트가 Retrofit과 OkHttp를 사용하고 있다고 가정해 봅시다.
1단계: 저장소 섹션에서
mavenCentral()
를 제거합니다.2단계: 다음 방법 중 하나로 종속성을 강제로 새로 고칩니다.
./gradlew --refresh-dependencies
, .m2
및 .gradle/caches
폴더를 제거하십시오. Android Studio에서 다음과 유사한 오류가 표시됩니다.
> Could not find com.squareup.okhttp3:okhttp:3.12.1.
Required by:
project :app
> Could not find com.squareup.okhttp3:okhttp-urlconnection:.
Required by:
project :app
> Could not find com.squareup.retrofit2:retrofit:2.9.0.
3단계: 누락된 모든 파일에는 동일한 그룹 ID가 있습니다.
com.squareup
4단계:
mavenCentral()
대신 아래를 추가하고 종속성을 다시 새로 고칩니다(2단계 참조). mavenCentral {
content {
includeGroupByRegex("com.squareup.*")
}
}
5단계: 모든 종속성이 안전한 목록에 표시될 때까지 같은 방식으로 계속합니다.
google()
에 대해서도 동일한 작업을 수행합니다.이 단계에서 멈출 수 있습니다. 종속성 해결이 더 안전하고 빠릅니다.
includeGroup으로 조금 더 나아가기
includeGroup
는 includeGroupByRegex
의 보다 정확한 버전입니다.제거
includeGroupByRegex("com.squareup.*")
하고 오류를 다시 검사해 보겠습니다. 그룹 이름을 볼 수 있습니다. 그것들을 사용하고 교체합시다:includeGroupByRegex("com.squareup.*")
~와 함께
includeGroup("com.squareup.retrofit2")
includeGroup("com.squareup.okhttp3")
모든
includeGroupByRegex
에 대해 이를 반복합니다.종속성 해결은 아직 더 안전하고 빠릅니다. 여기서 멈출 수 있습니다.
궁극적인 버전 - 다음을 사용: includeModule
이제 각각
includeGroup
을 하나씩 제거하고 오류를 다시 검사하십시오. 오류 콘솔에 표시된 그룹 및 모듈 이름만 사용하면 됩니다includeModule()
. 이것을 사용하고 교체합시다:includeGroup("com.squareup.retrofit2")
~와 함께
includeModule("com.squareup.retrofit2", "retrofit")
includeModule("com.squareup.retrofit2", "converter-gson")
includeModule("com.squareup.retrofit2", "retrofit-mock")
모든
includeGroup
에 대해 이를 반복합니다.결과 빌드 스크립트 파일은 상당히 크지만 리포지토리와 앱에 포함되는 항목을 완전히 제어할 수 있습니다.
결론
우리는 우리 자신의 속도로 마이그레이션할 수 있습니다. 바로
includeModule
를 사용하거나 일반 저장소에서 includeGroupByRegex
, includeGroup
, 마지막으로 includeModule
로 점진적으로 전환할 수 있습니다.위의
include
를 혼합하여 사용할 수도 있습니다.일반 리포지토리를
include
세트로 교체하는 한 종속성 해결이 더 빠르고 안전합니다. 그리고 우리는 우리 앱에 무엇이 들어가는지 정확히 알게 될 것입니다.추가 읽기:
Reference
이 문제에 관하여(Gradle에서 저장소 아티팩트를 허용 목록에 추가하기 위한 빠른 가이드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hszlangbaum/quick-guide-to-safelisting-repository-artifacts-in-gradle-1bfa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)