Skip to content

Latest commit

 

History

History
44 lines (37 loc) · 2.14 KB

gradle-constraint-lib.md

File metadata and controls

44 lines (37 loc) · 2.14 KB

[TIL] gradle 에서 라이브러리 버전을 제한하는 constraints

  • 때로는 특정 라이브러리 버전을 '제한'하고 싶을 때가 있다.
  • 주로 어떤 라이브러리 버전에 대해서 동료 개발자들에게 주의를 주기위한 목적도 있다.
  • 만약 어떤 라이브러리가 특정 버전 위에서는 문제가 있다면 어쩔까?
  • 아래와 같이 일반적으로 선언했다고 해보자.
dependencies {
  implementation 'org.lib.foo:1.5.0'
}
  • 개발자 Aorg.lib.foo:1.5.01.6.0 이상부터 치명적인 에러가 존재함을 인지하고 있다.
  • 하지만, 위와 같이 남겨놓을 경우 누군가가 시간이 흐르고 버전을 1.6.0으로 올린다면..? 배포 후에 문제가 발생할 수도 있다.
  • 이를 방지하기 위해 개발자 A는 라이브러리 버전 옆에 주석을 달았다. 아래와 같이 말이다.
dependencies {
  implementation 'org.lib.foo:1.5.0'
  //1.6.0 버전 이상부터는 버그가 존재합니다. 추후 버그 패치가 된 이후에 버전 변경이 필요합니다.
}
  • 이렇게만 해놔도 이슈 공유는 될 수 있고, 누군가가 gradle 에서 library 버전을 변경하려고 한다고 해도 관련된 버그가 패치되었는지 경각심을 갖게 만들 수는 있다.
  • 하지만 주석을 사용하지 않고 하는 방법은 없을까? gradle 에서는 이런 니즈를 위해 아래와 같은 configuration을 만들었다
dependencies {
  implementation 'org.lib.foo'
  constraints {
    implementation('org:lib:foo:1.5.0') {
      because '해당 라이브러리는 1.6.0 부터 치명적인 버그가 존재하기 때문에 1.5.0으로 버전을 강제합니다.'
    }
  }
}
  • constraints는 해당 라이브러리의 버전을 강제하는 기능을 가지고 있다.
  • BOM 템플릿이 아니지만, org.lib.foo 옆에 버전을 명시하지 않으면 아래 constraints 에서 설정한 버전을 따라가도록 되어있다.
  • 또한 implementation configuration 에서 제공하는 because를 이용하면 이유도 적을 수 있으므로 주석보다는 좀 더 깔끔한 처리가 가능하다.