본문 바로가기
[Developer]/Android

라이브러리를 업그레이드시 gradlew 빌드에서 Conflict 발생할 경우

by 해피빈이 2017. 9. 2.


환경은 Android Studio 2.3.3


gradlew를 이용하여 빌드를 하였고, 그러한 환경에서 특별히 문제없이 진행되던 나.

DB로 사용하던 Realm이 3.5.0 -> 3.7.0으로 업그레이드가 되었다는 메세지가 떠서(realm은 업그레이드 여부를 빌드시 알려준다)

반영하고자 build.gradle에서 숫자를 변경하였다.


그리고 빌드를 실행하니.. 아래와 같이 에러가!




Error:Conflict with dependency 'com.google.code.findbugs:jsr305' in project ':app'. Resolved versions for app (3.0.2) and test app (2.0.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.



에러를 해석하면..


com.google.code.findbugs:jsr305라는 라이브러리가 버전이 3.0.2가 새롭게 반영되었기 때문에 기존의 2.0.1을 import하였던 다른 라이브러리와 버전 충돌이 발생했다는 것이다.


이것을 해결하기 전에는 진행이 불가하다는 이야기.


그래서 위에서 언급하고 있는 구글의 사이트에 방문했다.


http://g.co/androidstudio/app-test-app-conflict


확인 결과 dependency를 확인하라는 이야기였고,


그것을 힌트로 다음을 수행하였다.


$ gradlew :app:dependencies






그랬더니 결과가 아래와 같이 주~욱!




정말 길어서 정신이 없겠지만, 차분히 문제가 되는 라이브러리의 그룹 패키지를 검색하였다.


com.google.code.findbugs


검색했더니 몇개가 나온다.


그 중 오른쪽에 2.0.1 -> 3.0.2와 같이 표기되는 것들이 있다. 그리고 2.0.1로 표시되는 것들도... 참고로 test compile 단계까지 확인하자.

간혹 debug나 release에서 보이지 않다가 test에서만 보이는 패키지도 존재한다.

(그냥 3.0.2라고 표시되는건 무시. 이것은 최신을 반영한 라이브러리고 conflict가 발생하지 않았다는 의미)


이것을 해결하기 위해 build.gradle을 아래와 같이 수정하였다.




각 라이브러리의 끝에, 아래의 내용을 추가하였다.

(예시는 위의 캡처를 참고)


, { 

exclude group: 'com.google.code.findbugs' 

}



만약 그룹 레벨이 아닌 모듈 레벨로 더 자세히 해결하고 싶다면, 아래와 같이 모듈도 추가하면 된다.

제거를 통해 기준을 맞추는 것이다.



, { 

exclude group: 'com.google.code.findbugs', module: 'jsr305'

 }





결국 내 프로젝트에서는 3.0.2버전으로 맞추기로 하였고, 빌드 결과는 성공!



반응형

댓글