내부적으로 개발중인 모듈 중에 수시 배포가 이루어져 동일한 버전임에서 모듈이 변경되야하는 라이브러리가 있다.
배포 버전은 0.1.1-SNAPSHOT으로 FIX해서 사용하고 있는데
처음에는 implementation "com.example:demo:0.1.1-SNAPSHOT" 일 경우 0.1.1-SNAPSHOT 중에서 가장 최신 버전의 모듈을 받아올 줄 알았다.
하지만 아무리 새로운 모듈을 Nexus3에 publish해도 최신 버전을 받아오지 않는 다는 것을 알았다.
이유는 gradle은 기본적으로 24시간동안 종속성의 버전을 캐시하기 때문이다.
그렇기 때문에 수동으로 .gradle/cache/ 의 디렉토리를 날려주거나 dependency를 refresh 해주지 않으면 24시간 동안은 동일한 모듈을 사용했다.
plugins {
id 'java-library'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework:spring-web:5.+'
}
1.0.0, 1.1.0, 1.2.0 이런식으로 버전이 생성될 경우 1+ 로 버전을 작성하면 최신 버전을 확인할 수 있다.
configurations.all {
resolutionStrategy.cacheDynamicVersionsFor 10, 'minutes'
resolutionStrategy.cacheChangingModulesFor 4, 'hours'
}
Gradle이 동적 버전의 확인된 버전을 캐시하는 시간을 변경하려면 cacheDynamicVersionsFor를 사용한다. 또한 변경하는 모듈에 대한 메타 데이터, 아티팩트를 캐시하는 시간을 변경하려면 cacheChangingModulesFor를 사용한다.
필자는 동적 버전과 임계 값을 이용해서 항상 최신 버전의 라이브러리를 받아오도록 구성했다.
모든 dependency에 대해서 임계치 캐시 값이 적용되는지 확인할 필요가 있다.