Gradle에서 Dependency Conflict 해결하기

Harry The Great
May 10, 2019 · 4 min read

의외로 처음 안드로이드 개발을 하게되면 마주하는 가장 짜증내는 문제가 의존성끼리의 충돌입니다. 그리고 생각보다 관련한 글이 많이 없기에 작성하게되었습니다. 일반적으로 그래들에서의 의존성끼리 충돌은 서로 동일한 라이브러리를 사용하고있지만 서로 다른 버전을 사용할때 일어납니다. 이경우 그래들에서는 사용자가 어떤 버전을 사용할지 모르기때문에 에러메세지를 띄웁니다.

문제를 먼저 찾자

./gradlew app:dependencies
./gradlew app:dependencies --dependency modulename //모듈과함께
./gradlew app:dependencies --configuration compile //의존성 구성값과함께

먼저 문제가 되는 라이브러리를 알아야합니다. 위 커맨드를 이용하면 각각의 라이브러리들을 알 수 있기때문에 충돌하는 라이브러리들을 검색하여 확인할 수 있습니다.

사실 안드로이드 스튜디오에서 프로젝트 구성을 열어보면 GUI를 통해 현재 문제가되는 플러그인과 새로 버전이 있는 의존성들을 보여주기는하지만 일반적으로 개인 개발이 아니라면 versions 그래들파일이나 dependency 그래들파일과같은 파일에 변수로 선언을하는데 변수로 선언한경우 프로젝트 구성에서 인식을 하지못합니다( 그래들 사이트도 역시…) 혹시 할 수 있는 방법이 있는데 제가 모르는거라면 댓글 꼭 부탁드립니다..!

만약 라이브러리들이 많다면 눈감짝할사이에 화면이 슉슉 넘어가버리게됩니다. 따라서 따로 텍스트파일로 저장하고싶으면

./gradlew app:dependencies > 경로/dependency.txt

혹은 HTML파일과같은 형태로 보고싶다면

apply plugin: 'project-report'

빌드스크립트 상단에 플러그인을 선언해주고

./gradlew htmlDependencyReport

report를 만드는 그래들 명령어를 입력해줍니다.

이제 해결을 해봅시다!

직접선언하기

implementation "org.hamcrest:hamcrest:버전명"

가장 간단명료한 방법은 그래들이 어떤 버전을 모를때 직접 gradle파일에 라이브러리를 선언하는 방법이 있습니다. 혹시 어떤 버전을 해야할지 모르신다면 경험상 높은버전이 더 좋았습니다.

문제가 되는 라이브러리에서 해당 모듈을 빼기

implementation("org.hamcrest:hamcrest:버전명"){      exclude group: "org.hamcrest", module: 'hamcrest'}

implementation DSL 형식의 문법으로 그룹명과 모듈명으로 가져오지 않을 라이브러리를 명싷바니다.

충돌할경우 어떻게할지 명시하기

android{
configurations.all{
exclude group: 'org.hamcreset', module: 'hamcrest'
resolutionStrategy{
forcedModules = ['asm:asm-all:3.3.1']
}
}

resolutionStrategy에서 force 혹은 forceModuels 값을 주게되면 해당 버전명으로 가져옵니다. 하지만 이와같이 configuration.all을 이용하여 전역으로 설정하게되면 문제가 발생할 가능성이 높 으니 되도록 직접 라이브러리별로 선언하거나 혹은 configuration의 scope를 설정하여 사용하는편이 좋습니다.

해리의 유목코딩

디지털 노마드를 꿈꾸는 해리의 개발블로그

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store